Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Linux中协作框架中线程数量的实际限制_C++_Linux_Multithreading - Fatal编程技术网

C++ Linux中协作框架中线程数量的实际限制

C++ Linux中协作框架中线程数量的实际限制,c++,linux,multithreading,C++,Linux,Multithreading,因此,我知道我可以使用和friends在Linux中增加进程的线程数。根据,线程数量的理论限制由内存决定(大约100000 K)。就我的使用而言,我正在研究以合作的方式使用,因此不必担心虚假的上下文切换。我知道我可以将活动线程的数量限制为内核的数量。我的问题是线程数量的实际限制是什么,在这个限制之后,调度程序中的假设开始出现。如果我保持真正的合作风格,那么额外的线程是“免费”的吗?任何案例研究或实际例子都会特别有趣 对于这种情况,Apache服务器似乎是最容易分析的程序。有人有没有关于Apach

因此,我知道我可以使用和friends在Linux中增加进程的线程数。根据,线程数量的理论限制由内存决定(大约100000 K)。就我的使用而言,我正在研究以合作的方式使用,因此不必担心虚假的上下文切换。我知道我可以将活动线程的数量限制为内核的数量。我的问题是线程数量的实际限制是什么,在这个限制之后,调度程序中的假设开始出现。如果我保持真正的合作风格,那么额外的线程是“免费”的吗?任何案例研究或实际例子都会特别有趣

对于这种情况,Apache服务器似乎是最容易分析的程序。有人有没有关于Apache在变得无用之前产生了多少线程的数字


,但与Windows、先发制人代码有关

我相信线程的数量是有限的

  • 通过可用内存(每个线程至少需要几个页面,通常需要很多页面,尤其是堆栈和线程本地存储)。请参阅函数以调整该参数。线程堆栈空间为每兆字节的情况并不少见

  • 至少在Linux(NPTL,即当前的Glibc)和其他系统上,用户线程与内核线程相同,但内核可以调度的任务数量相同

  • 我猜在大多数Linux系统上,第二个限制比第一个更强大。内核线程(在Linux上)是通过创建的。在旧的Unix或Linux内核中,任务的数量是硬连线的。今天它可能是可调的,但我猜它是成千上万,而不是数百万

    你应该考虑编码,它是你梦寐以求的羽毛轻线。< /P>


    如果您需要许多协作线程,可以研究实现技巧。

    啊,去吧,那不是很好吗。Lua拥有一流的协同程序,这也会使这变得更容易。我真正想要的是一个干净的用于调试的堆栈框架。继续传递或消息传递很好,但它们往往会删除事件序列,或者至少使调试该序列变得困难。如果我能使用大量线程,这将比使用getcontext/makecontext和编写穷人的协作线程库容易得多。我不明白为什么你需要一个干净的堆栈框架(为什么它有助于调试?清除每个本地线程就够了?Java会自动完成)。用词不当。一个“干净”的堆栈框架,即堆栈将准确地告诉我如何到达代码中的给定点,与工作队列不同,工作队列只告诉我如何到达特定的代码段,因为它是从队列中弹出的,可能不会给出推送到何处的任何指示,特别是当它可以从多个站点推送时。您可能会发现下面的文章很有趣。在这本书中,有一个模糊的说法,即高端机器上大约有100万个并发线程。@Kevin,这给了我希望。特别有趣的是,测试是为了支持O(1)调度器而进行的,该调度器已被替换。@Kevin相关论文: