在Linux系統中theard 機制是採取 process-thread一對一的模型 即"each thread is actually a separate process in the kernel"
thread的總數受制於實體記憶體容量的限制 (kernel/fork.c):
void __init fork_init(unsigned long mempages){
.....
max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE);
.....
init_task.signal->rlim[RLIMIT_NPROC].rlim_cur = max_threads/2;
init_task.signal->rlim[RLIMIT_NPROC].rlim_max = max_threads/2;
......
}
其中max_threads即是最大thread數,也是每一個使用者的程式所能fork的最大子行程數
(可以透過"cat cat /proc/sys/kernel/threads-max " 或 "/sbin/sysctl kernel.threads-max"得知)
max_threads/2為每一個使用者(除root外)所能執行的最大行程數(可以透過"ulimit -u"得知)
參考資料:
http://www.ibm.com/developerworks/cn/linux/kernel/l-thread/index.html
http://pauillac.inria.fr/~xleroy/linuxthreads/faq.html
http://topic.csdn.net/u/20070213/10/c9cde32c-b8a9-471f-9615-f2cfcab717f7.html
http://ubuntuforums.org/showthread.php?t=695845
沒有留言:
張貼留言