Jas*_*ker 8 python multithreading tornado gil
我刚开始研究一个有一些CPU问题的龙卷风应用程序.随着时间的推移,CPU时间将单调增长,最大化CPU为100%.该系统目前设计为不阻止主线程.如果需要执行阻塞和异步驱动程序不可用的操作,它将生成另一个线程来执行阻塞操作.
因此,我们的主线程几乎完全是CPU绑定的,而且其他一些线程几乎完全是IO绑定的.从我读过的内容来看,这似乎是解决GIL问题的最佳方式.另外,我的分析表明我们花了很多时间等待信号(我假设是__semwait_signal在做什么),这与GIL在我有限的理解中会产生的影响是一致的.
如果我使用sys.setcheckinterval将检查间隔设置为300,则CPU增长将显着减慢.我想要确定的是我是否应该增加检查间隔,将其保持在300,或者是否需要增加检查间隔.毕竟,我注意到CPU性能变得更好,但我有点担心这会对系统的响应性产生负面影响.
当然,正确答案可能是我们需要重新考虑我们的架构以考虑GIL.但这不是可以立即完成的事情.那么如何确定短期内采取的适当行动?
我要检查的第一件事是确保您正确退出线程。仅凭您的描述很难弄清楚发生了什么,但您使用了“单调”一词,这意味着 CPU 使用与时间而不是负载相关。
您很可能会遇到 Python 的线程限制,但它应该随着负载(活动线程数量)而上下变化,并且随着这些线程的退出,CPU 使用率(上下文切换成本)应该减少。线程一旦创建,是否有某种原因可以永远存在?如果是这种情况,请优先考虑重新架构。否则,短期内应该弄清楚为什么 CPU 使用率与时间而不是负载相关。这意味着每个新线程在系统中都有一个永久的、不可逆转的成本——这意味着它永远不会退出。
| 归档时间: |
|
| 查看次数: |
642 次 |
| 最近记录: |