ams*_*mso 8 c++ linux performance multithreading pthreads
我正在考虑使用可能数百个线程来实现通过网络管理设备的任务.
这是一个在带有Linux内核的powerpc处理器上运行的C++应用程序.
在每个任务执行同步以将数据从设备复制到任务的初始阶段之后,任务变为空闲,并且仅在收到警报时唤醒,或者需要更改某些数据(配置),这在启动后很少见相.一旦所有任务都达到"空闲"阶段,我预计每秒只需要唤醒几次.
所以,我主要担心的是,如果我有数百个线程,它们会在闲置后对系统产生负面影响吗?
谢谢.AMSO
编辑:
我正在根据我得到的答案更新问题.多谢你们.因此,似乎拥有大量线程空闲(IO阻塞,等待,休眠等)本身在响应性方面不会对系统产生影响.当然,他们会为每个线程的堆栈和TLS数据花费额外的钱,但只要我们在该东西上投入更多内存(使其更多),这是可以的.
但是,其他问题必须考虑在内.由于需要等待队列或其他类似资源,等待100个线程可能会增加内核的内存使用量.还有一个延迟问题,看起来不确定.要检查每个解决方案的响应能力和内存使用情况,应该对其进行测量并进行比较.
最后,数百个主要是空闲的线程的整个想法可以像线程池一样建模.这减少了一点代码线性,但显着提高了解决方案的可扩展性,并且可以轻松调整propper care,以调整性能和资源使用之间的折衷.
我认为就是这样.感谢大家的投入.
-
amso
每个线程都有开销 - 最重要的是每个线程都有自己的堆栈和TLS.性能不是一个问题,因为他们不会得到任何时间切片,除非他们实际做任何事情.您可能仍想考虑使用线程池.
主要是它们会耗尽地址空间和堆栈内存;一旦你获得了 1000 个线程,这就会变得非常重要,因为我发现每个线程 10M 对于堆栈来说是典型的(在 x86_64 上)。它是可以改变的,但必须小心。
如果你有一个 32 位处理器,地址空间将是主要限制,一旦你达到 1000 个线程,你很容易就会耗尽 AS。
它们消耗了一些内核内存,但可能没有用户空间那么多。
编辑:当然,线程只有在同一进程中时才相互共享地址空间;我假设他们是。
归档时间: |
|
查看次数: |
2271 次 |
最近记录: |