Windows 8.1中可以生成的最大线程数是多少,哪些因素可以限制线程数?
答案 0 :(得分:4)
与Windows中的大多数限制一样,这受可用内存的限制。当所有可用的虚拟内存被线程堆栈占用(每个1 MB)时,一个32位进程比2000个线程略胜一筹。 64位进程受提交分配所需的页面文件大小的限制。成千上万,这取决于页面文件可以增长多快以满足程序的需要。内核的分页内存池也有一个限制,每个线程都有一个内核堆栈,因此它可以进行内核调用,通常每个线程24 KB。
这些限制远超出了程序员可以保持在空中而不会踩到脚的球的数量。他会跛行很长一段时间,因此很容易排除故障。
Mark Russinovich探讨了excellent blog post中的限制。
答案 1 :(得分:0)
我相信你可能会认为这有点不对劲。线程受CPU限制,有多少可以适用于ram,而不适用于Windows操作系统。此外,攻击并发编程的方式在很大程度上取决于您使用的编程语言如何解决问题。例如,使用stl库的c ++与使用mpi的c ++(基于进程)非常不同。
每个CPU都有一次可以执行的物理/虚拟线程限制。超过该数量将导致线程过度订阅,从而强制执行任务切换。例如我的PC有8个线程(4个核心/ 4个虚拟),如果我创建10个线程,我会得到它们但是2个总是不会在任何时候运行。这将使机器进行额外的任务切换以满足所有10个线程。另外,请记住,您的程序并不是PC中唯一运行的程序。
使用stl:
查找可以在C ++中运行的最大线程数#include<iostream>
#include<thread>
using namespace std;
int main()
{
cout << thread::hardware_concurrency();
cin.get();
return 0;
}
虽然我建议使用像C#这样的编程语言,它使用自动线程池和任务来抽象线程。这将使学习概念变得更容易。
此外,进程和线程也不同。为了对这种差异做出很好的解释,我建议使用以下链接:
答案 2 :(得分:-1)
微软实习生提问:
可能的ans:取决于RAM大小和处理器。