我正在考虑使用可能数百个线程来实现通过网络管理设备的任务。
这是一个在带有 Linux 内核的 powerpc 处理器上运行的 C++ 应用程序。
在每个任务进行同步以将数据从设备复制到任务的初始阶段之后,任务变得空闲,并且仅在收到警报或需要更改一些数据(配置)时唤醒,这在启动后很少见阶段。一旦所有任务都达到“空闲”阶段,我预计每秒只有几个任务需要唤醒。
所以,我主要关心的是,如果我有数百个线程,一旦它们闲置,是否会对系统产生负面影响?
谢谢。
阿姆索
edit:
我正在根据我得到的答案更新问题。多谢你们。
所以看起来有大量线程空闲(IO 阻塞、等待、睡眠等),per se,不会对系统的响应能力产生影响。
当然,他们会为每个线程的堆栈和 TLS 数据花费额外的钱,但只要我们在该东西上投入更多内存(使其更多 €€€)就可以了
但随后,还必须考虑其他问题。由于需要等待队列或其他类似资源,数百个线程等待可能会增加内核的内存使用量。还有一个延迟问题,看起来是不确定的。要检查每个解决方案的响应能力和内存使用情况,应该对其进行测量并进行比较。
最后,数百个大部分处于空闲状态的线程的整个想法可以像线程池一样建模。这会降低一些代码线性度,但会显着提高解决方案的可扩展性,并且通过适当的注意,可以轻松调整以调整性能和资源使用之间的折衷。
我想仅此而已。感谢大家的意见。
--
amso
每个线程都有开销 - 最重要的是每个线程都有自己的堆栈和 TLS。性能并不是什么大问题,因为除非他们实际做任何事情,否则他们不会获得任何时间片。您可能仍然想考虑使用线程池。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)