2

我正在编写一个简单的程序,它使用 Twisted 在运行多个客户端的单台计算机和多个服务器之间来回发送消息。对这些消息的回复需要相当长的计算时间,这就是为什么我在客户端和服务器上都实现deferToThread()Callback()不阻止消息进入的原因。

但是,我想最大化可以同时处理的同时活动连接的数量。我认为,就目前而言,我的程序可以同时处理 10 个活动连接(如 10 个线程在客户端或服务器上执行计算以获取回复)。这是默认的活动连接数是否有意义,我可以使用此处suggestThreadPoolSize()描述的反应器选项来增加它吗?

4

1 回答 1

4

如果您的程序受 CPU 限制,那么 Python全局解释器锁将阻止您进行任何多 CPU 并发,因此调整线程池大小不会对您的程序处理新连接的速度产生太大实际影响.

相反,您应该使用reactor.spawnProcess启动子进程,并将 CPU 密集型工作转移到子进程池中。诸如安瓿之类的东西可能会帮助您更方便地做到这一点。

但是,即使是多个进程也只会为您购买尽可能多的 CPU 并发性...... CPU。(好吧,实际上是内核或超线程;但是,至少是“逻辑”CPU。)当您没有可用资源来实际完成这项工作时,接受更多工作将在内存中建立巨大的缓冲区并最终使您的计算机崩溃。程序。最终你需要应用背压

Twisted 确实提供了您现在执行此操作所需的所有工具,尽管我们正在努力使其变得更容易

哦 - 这应该不言而喻,但如果你的程序不受CPU 限制,那么你应该停止使用线程 ;-)。

于 2013-06-06T04:24:23.787 回答