- 使用非阻塞I/O和水平触发就绪通知,为每个线程服务多个客户端
- 使用非阻塞I/O和就绪状态改变通知,为每个线程服务多个客户端
- 使用异步I/O,为每个服务器线程服务多个客户端
- 使用阻塞I/O,为每个服务器线程服务一个客户端
- 将服务器代码构建到内核中
所以首先,"5"不行,因为我不会往内核里面添加任何东西。
"4"看起来也不行,因为GIL的原因。当然,你可以使用多进程代替线程,这确实会带来显著的提升。阻塞I/O也具有更易于理解的优点。
我的知识在这里有些欠缺:
"1" 是传统的 select 或 poll,可以轻松地与 multiprocessing 结合使用。
"2" 是就绪状态变更通知,由较新的 epoll 和 kqueue 使用。
"3" 我不确定是否有任何内核实现具有 Python 包装器。
因此,在 Python 中,我们拥有像 Twisted 这样的一袋伟大的工具。也许它们是一个更好的方法,尽管我已经对 Twisted 进行了基准测试,并发现它在多处理器机器上太慢了。也许有 4 个 twisteds 和负载均衡器可能会做到这一点,我不知道。任何建议都将不胜感激。