Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.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
Multithreading 线程,QThread,每个进程有多少个是“合理的”?_Multithreading_Qt_Threadpool_Qthread - Fatal编程技术网

Multithreading 线程,QThread,每个进程有多少个是“合理的”?

Multithreading 线程,QThread,每个进程有多少个是“合理的”?,multithreading,qt,threadpool,qthread,Multithreading,Qt,Threadpool,Qthread,问题:每个进程有多少QThread实例是合理的 这特别引用了Qt的QThread实例,但从逻辑上讲,这个问题应该与使用任何库的任何基于线程的设计有关 例如,我知道特定于平台的资源限制可能默认支持多达30个QTcpSocket实例,因此理论上,如果您有30个活动套接字,那么当系统处于最大负载时,将是30个QThread实例。然而,这可能不是什么大问题,因为这些线程中的大多数都应该在睡眠/等待网络流量 类似地,我假设实例化的核心数或本机线程数最多可以为负责繁重连续工作的QThread实例执行。因此,

问题:每个进程有多少QThread实例是合理的

这特别引用了Qt的QThread实例,但从逻辑上讲,这个问题应该与使用任何库的任何基于线程的设计有关

例如,我知道特定于平台的资源限制可能默认支持多达30个QTcpSocket实例,因此理论上,如果您有30个活动套接字,那么当系统处于最大负载时,将是30个QThread实例。然而,这可能不是什么大问题,因为这些线程中的大多数都应该在睡眠/等待网络流量

类似地,我假设实例化的核心数或本机线程数最多可以为负责繁重连续工作的QThread实例执行。因此,如果您有8个8核,那么可能还有8个QThread实例,当系统处于最大负载时,它们可能一直在工作

然后,当然,我们有了主线

那么,这是否意味着我们将实例化:

30个套筒螺纹+每个芯8个辅助螺纹+1个主螺纹

…用于8核系统上的39个线程

具体地说,如果特定于应用程序的需求有其他线程池需求,并且您在这里添加了一打QThread,在那里添加了一打QThread实例,那么100个QThread实例似乎有点愚蠢,即使它们中的大多数都是空闲/休眠/等待的,对吗

那么,是否有一个截止线?39个线程是合理的,但300个线程是不合理的


是的,我知道每个线程都有一个默认堆栈大小,比如每个线程10MB,所以我受到虚拟内存的限制。但是,真的,实例化30K线程是愚蠢的吗?这是一个糟糕的设计,可能会想要这样的东西吗?

您可以使用它来了解当所有线程都很忙时,有多少线程可能会提高性能。对于大多数等待的线程,限制取决于操作系统,但对于Qt,最好使用信号插槽系统,而不是使用很多线程。只有一个连接了信号的对象总是比额外线程轻,特别是如果额外线程也有自己的事件循环。大多数Qt网络应用程序可能根本不应该使用线程。

我经常被警告不要使用服务器或大量P2P代码中的每连接类型线程模型-它们的扩展性不太好。每个线程都会占用相当多的内存,除非您对其进行调整。对于客户机来说,这可能没什么大不了的,因为要观看的内容通常要少得多。答案几乎完全取决于你正在制作的应用程序的类型。但要知道,至少在大多数线程实现中,一个线程可以很好地监视一组连接,并将实际工作传递给一组工作线程。具体取决于。卡巴斯里在我的盒子上有166根线,总共1198根。