多线程开发要点(一)
1. 线程栈简述
在一个进程空间能够打开的线程是有限的。
对于32位系统,进程空间的虚拟地址空间有4g。在unix系统下,
有差不多3g的空间分配给堆和栈使用。 在支持线程的进程
里,主线程负责管理这这3g的空间(个人理解)。每次打开一个
新的线程时,就会在进程空间的堆上分配一定额度的空间供
线程使用。
2. 在类unix系统下,通过ulimit -s 命令查询栈的大小。
一般设置都是8192kb,所以此时一个进程里最多分配382左右个线程后,
就会失败。
3. 线程栈的设置
1) 直接通过 ulimit -s size 设置系统全局限制。
2) 在pthread_create函数中设置线程栈大小。针对具体线程。
4. 在多线程程序开发中设置每个线程使用的栈有利于节省系统资源。
多线程开发要点(二)
线程专用存储
POSA2 中提到:
为在多线程间传递的请求动态分配内存的同步模型会在传统的多处理器操作系统中产生巨大的开销。
个人理解:
保证多线程的高效性,线程执行过程中应该尽量少或者不用统一资源的获取。因为统一资源的获取,
必将导致同步的产生,从而影响效率。
解决办法:
在线程创建时就将统一资源分配好,并将这部分资源放在线程专用存储中使用。从而减少了执行
过程中的同步开销。因为一般服务程序都会在初始阶段创建线程。