据我所知,在Python中,如果您在多核环境中使用普通线程,则GIL通常会妨碍并以负面方式影响性能(因为线程会不断尝试获取和释放GIL并执行线程/处理器之间的大量上下文切换)。
这就是为什么很多人开始使用绿色线程的原因,例如事件。 eventlet库使您可以让多个绿色线程协同工作,并且可以在单个处理器中完美运行(较少的同步问题,快速生成/效率等)。
我的问题是,如果我有一个多核操作系统并要设计python应用程序,那么我应该遵循什么最佳实践或设计模式来利用协作线程(绿色线程)和多核处理器的优势。
最佳答案
我在关于YouTube增长的技术演讲中首次看到的非常通用的方法是:识别并解决瓶颈,饮料,睡眠等问题,然后再继续解决瓶颈问题。
因此,当您的工作量过多而核心闲置时,请运行更多的进程。使用相同的方法,您将知道何时停止甚至缩减进程池。
[1] https://www.youtube.com/watch?v=ZW5_eEKEC28