Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
谁能给我解释一下像我这样扭曲的python';我五岁?_Python_Multithreading_Asynchronous_Twisted - Fatal编程技术网

谁能给我解释一下像我这样扭曲的python';我五岁?

谁能给我解释一下像我这样扭曲的python';我五岁?,python,multithreading,asynchronous,twisted,Python,Multithreading,Asynchronous,Twisted,我看过文件了。我玩过一些例子。但我仍然无法理解异步在有用的时候究竟意味着什么,以及许多人如此痴迷的魔力在哪里 如果只是为了避免等待I/O,为什么要简单地在线程中运行?为什么需要延期 我想我缺少一些关于计算的基本知识,所以这些问题。如果是,是什么 就像你五岁。。。好:线程不好,异步好 现在,严重的是:线程会产生开销——包括解释器的锁定和切换,以及内存消耗和代码复杂性。当您的程序是IO绑定的,并且大量等待其他服务(API、数据库)返回响应时,您基本上是在等待空闲,浪费资源 异步IO的要点是减少线程的

我看过文件了。我玩过一些例子。但我仍然无法理解异步在有用的时候究竟意味着什么,以及许多人如此痴迷的魔力在哪里

如果只是为了避免等待I/O,为什么要简单地在线程中运行?为什么需要延期


我想我缺少一些关于计算的基本知识,所以这些问题。如果是,是什么

就像你五岁。。。好:线程不好,异步好

现在,严重的是:线程会产生开销——包括解释器的锁定和切换,以及内存消耗和代码复杂性。当您的程序是IO绑定的,并且大量等待其他服务(API、数据库)返回响应时,您基本上是在等待空闲,浪费资源

异步IO的要点是减少线程的开销,同时保持并发性,保持程序简单,避免死锁并降低复杂性

以聊天服务器为例。您在服务器上有数千个连接,您希望一些人根据他们所在的房间接收一些消息。使用线程执行此操作将比使用异步方式执行此操作复杂得多

重延迟-这只是一种简化代码的方法,而不是在等待的操作准备就绪时给每个函数一个回调以返回

另一个注意事项——如果您想要一个更简单、更优雅的异步IO框架,请尝试tornado,它基本上是一个异步web服务器,带有异步http客户机,并替换了延迟。它编写得非常好,可以用作通用异步IO框架


请参见

线程有开销,在线程中等待仍然会消耗CPU/内存。另外还有同步问题。有一个著名的解释和比较不同的I/O策略,称为I/I,为什么在异步情况下可以避免这种开销?您仍然需要等待并存储程序数据,不是吗?Dvir Volk已经在下面解释过:)Tornado没有任何延迟的替代品。它在每个调用站点都有手动回调传递。这就是Deliver的替代品。不,tornado有一个新的库可以让你这么做。哇!这几乎就像但有点更糟。我真的没有得到龙卷风(或cyclone.io)的炒作。蟒蛇式的时髦方式?一旦你习惯了延迟就可以了。我从来没有将tornado仅仅用作IO框架,但我可以告诉你,对于构建Web服务器并在应用程序中使用它的http客户端来说,这太棒了。API很简单,学习曲线很小,我不能说twisted。