如果进程一直在创建线程,特别是当线程数超过操作系统限制时会发生什么? Windows和Linux会做什么?
答案 0 :(得分:2)
如果线程没有做任何工作(即你没有启动它们),那么在Windows上你会遇到资源限制,正如汉斯链接的博客文章所指出的那样。 Linux系统也会对它可以创建的线程数量有一些限制;毕竟,你的计算机没有无限的虚拟内存,所以在某些时候创建一个线程的调用将会失败。
如果线程实际上正在工作,通常会发生的是系统开始抖动。每个线程(包括程序的主线程)获得一个小的时间片(通常在几十毫秒内测量),然后它被换出来用于下一个可用的线程。有这么多线程,它们的工作集足够大以占用所有可用RAM,因此每个线程上下文切换都要求将当前运行的线程写入虚拟内存(磁盘),并从磁盘读取下一个可用线程。因此,系统花费更多时间进行线程上下文切换,而不是实际运行线程。
线程将继续执行,但速度非常慢,最终你将耗尽虚拟内存。但是,创建那么多线程可能需要很长时间。你可能会放弃并关闭机器。
大多数情况下,遭受此类颠簸的机器就像一台机器在所有核心上陷入无限循环。即使按Control + Break(或类似)也不会立即生效,因为处理该信号的线程必须在内存中运行才能处理它。在线程 响应这样的信号之后,它需要很长时间才能终止所有线程并清理虚拟内存。