我刚刚开始研究一个有一些 CPU 问题的龙卷风应用程序。CPU 时间将随着时间的推移单调增长,使 CPU 达到 100%。该系统目前设计为不阻塞主线程。如果它需要做一些阻塞和异步驱动程序不可用的事情,它将产生另一个线程来执行阻塞操作。
因此,我们的主线程几乎完全受 CPU 限制,而其他线程几乎完全受 IO 限制。根据我的阅读,这似乎是遇到 GIL 问题的完美方式。另外,我的分析表明我们花费了大量时间等待信号(我假设这__semwait_signal
是正在做的事情),这与 GIL 在我有限的理解中产生的影响是一致的。
如果我使用sys.setcheckinterval
将检查间隔设置为 300,CPU 增长会显着减慢。我要确定的是我是否应该增加检查间隔,将其保持在 300,或者害怕增加它。毕竟,我注意到 CPU 性能变得更好,但我有点担心这会对系统的响应能力产生负面影响。
当然,正确的答案可能是我们需要重新考虑我们的架构以将 GIL 考虑在内。但这不是可以立即完成的事情。那么,我如何确定在短期内采取的适当行动方案呢?