我正在使用一个Python服务器,该服务器为每个到服务器的连接生成一个greenlet。目前,服务器没有使用绿池。虽然我的直觉是使用池可以提高性能(主要是响应时间和每秒请求吞吐量(,但在我反复尝试实现一个greenlets池的过程中,对于每个greenlets/连接,只使用Gevent.spawn((似乎没有太大的性能优势。
我看到了这个问题,这很有帮助,尽管我很好奇像Gevent pool这样的greenlet池在服务器中的应用。这是一个有用的模式,la线程池吗?或者,在服务器的情况下,使用池是否无关紧要,因为与线程相比,Greenlet是如此轻量级?
Greenlet是轻量级的,但它们确实会消耗内存。因此,即使进程可以支持的greenlet数量将远大于操作系统可以支持的线程数量,但它们仍然有成本。因此,池仍然是限制可以派生的greenlet数量的有用工具,但它的大小可能最好设置得比实际线程的限制大得多
此外,由于它们的协作多任务性质,每个请求的延迟(假设每个新请求都由一个新的greenlet处理(将随着greenlet数量的增加超过某个阈值而开始增加。在一次允许更多请求和在每个请求需要越来越多的时间才能完成时创建较差的用户体验之间存在权衡。有时最好限制传入负载并拒绝新请求,而池是一种有用的方法。