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