操作系统¶
1 一个进程最多可以创建多少个线程?¶
参考 https://www.cnblogs.com/xiaolincoding/p/15013929.html
和以下 2 个因素有关: - 进程的虚拟内存空间上限(linux 上 32 位可用虚拟内存 3G,64 位可用虚拟内存 128T),因为创建一个线程,操作系统需要为其分配一个栈空间,如果线程数量越多,所需的栈空间就要越大,那么虚拟内存就会占用的越多。 - 系统参数限制,虽然 Linux 并没有内核参数来控制单个进程创建的最大线程个数,但是有系统级别的参数来控制整个系统的最大线程个数。
有关系统参数如下:
- /proc/sys/kernel/threads-max
,表示系统支持的最大线程数,默认值是 14553
;
- /proc/sys/kernel/pid_max
,表示系统全局的 PID 号数值的限制,每一个进程或线程都有 ID,ID 的值超过这个数,进程或线程就会创建失败,默认值是 32768
;
- /proc/sys/vm/max_map_count
,表示限制一个进程可以拥有的 VMA (虚拟内存区域) 的数量,具体什么意思我也没搞清楚,反正如果它的值很小,也会导致创建线程失败,默认值是 65530
。