我最近正在阅读这篇文档,其中列出了一些可用于实现套接字服务器的策略。即,它们是:
- 每个线程为多个客户端提供服务,并使用非阻塞 I/O 和级别触发的就绪通知
- 每个线程为多个客户端提供服务,并使用非阻塞 I/O 和就绪更改通知
- 每个服务器线程为多个客户端提供服务,并使用异步 I/O
- 使用每个服务器线程为一个客户端提供服务,并使用阻塞 I/O
- 将服务器代码构建到内核中
现在,我会很感激在 CPython中应该使用哪个提示,我们知道它有一些优点,也有一些缺点。我最感兴趣的是高并发下的性能,是的,当前的一些实现太慢了。
因此,如果我可以从简单的开始,“5”就出来了,因为我不会将任何东西侵入内核。
“4” 看起来它也因为 GIL 而必须出局。当然,您可以在这里使用多处理来代替线程,这确实会带来显着的提升。阻塞 IO 还具有更容易理解的优点。
在这里,我的知识有所减弱:
“1”是传统的选择或轮询,可以简单地与多处理结合。
"2" 是准备更改通知,由较新的 epoll 和 kqueue 使用
“3”我不确定是否有任何具有 Python 包装器的内核实现。
因此,在 Python 中,我们有很多很棒的工具,比如 Twisted。也许它们是一种更好的方法,尽管我已经对 Twisted 进行了基准测试,发现它在多处理器机器上太慢了。我不知道,也许用负载平衡器进行 4 次扭曲可能会做到这一点。任何意见,将不胜感激。