问题:每个进程有多少个“QThread”实例是“合理的”?
(这特别引用了 Qt 的QThread
实例,但从逻辑上讲,这个问题应该与使用任何库的任何基于线程的设计有关。)
例如,我了解特定于平台的资源限制可能默认支持最多三十 (30) 个 " " 实例,因此理论上,如果您有 30 个活动套接字,那么当系统处于最大负载下时QTcpSocket
,这将是 30 个实例QThread
. 但是,这可能没什么大不了的,因为这些线程中的大多数应该为网络流量“休眠/等待”。
同样,我会假设对于承担QThread
“繁重连续工作”的实例,最多可以实例化“核心”或“本机线程可以执行”的数量。因此,如果您有八 (8) 个内核,则可能是另外八个QThread
实例(当系统处于最大负载时,这些实例可能一直在工作)。
然后,当然,我们有“主线程”。
这是否意味着将实例化:
(30 个套接字线程)+(每个核心 8 个工作线程)+(1 个主线程)
...对于 39 个线程(在 8 核系统上)?
具体来说,如果特定于应用程序的需求有其他线程池需求,并且您添加了QThread
十几个QThread
- 这里和十几个 - 实例 - 似乎 100 个QThread
实例有点愚蠢,即使它们中的大多数是“空闲/睡觉/等待”,对吧?
那么,有断档吗?“39 线程”是“合理的”,但“300 线程”是“不合理的”?
(是的,我知道有一个“每个线程的默认堆栈大小”,例如“每个线程10MB”,所以我受到虚拟内存的限制。但是,真的,实例化30K线程是不是很愚蠢- - 这是一个糟糕的设计,会想要这样的东西吗?)