use*_*896 4 python multithreading asynchronous twisted
我正在编写 NAT 的实现。我的算法如下:
我一直在阅读关于 Twisted 的文章。我很好奇 Twisted 是否利用了多核 CPU?假设系统有数千个用户,一个数据包一个接一个。使用twisted 可以在每个内核上同时进行查找表操作。我听说 GIL 无论如何都不允许使用线程。也许我可以从多处理中受益>
Nginix 是异步的,同时愉快地为数千个用户提供服务。
不鼓励使用扭曲的线程。它在异步使用时具有非常好的性能,但您为请求处理程序编写的代码不能阻塞。因此,如果您的处理程序是一段相当大的代码,请将其分解为较小的部分,并利用 Twisted 的著名代码Deferreds通过回调附加其他部分。它当然需要与大多数程序员习惯的想法有些不同的想法,但它有好处。如果代码有阻塞部分,比如数据库操作,或者通过网络访问其他资源以获得一些结果,也尝试为这些任务寻找异步库,这样你也可以Deferreds在这些情况下使用。如果您不能使用异步库,您可能最终会使用deferToThread函数,它将在不同的线程中运行您想要调用的函数并返回一个Deferred 为它,并在完成后触发您的回调,但最好将其用作最后的手段,如果没有其他办法。
以下是官方教程Deferreds:
http://twistedmatrix.com/documents/10.1.0/core/howto/deferredindepth.html
另一个很好的指南,它可以帮助习惯在“异步模式”中思考:
http://ezyang.com/twisted/defer2.html