我已经阅读了文档。我玩过一些例子。但是我仍然无法掌握什么是异步意味着它什么时候有用呢?魔术很多人在哪里看起来如此疯狂?
如果只是为了避免等待I / O为什么简单地在线程中运行? Deferred为什么需要?
我认为我缺少一些关于计算的基础知识,所以那些问题。如果是这样的话是什么?
答案 0 :(得分:4)
就像你是五个......好吧:线程不好,异步好!
现在,认真地说:线程会产生开销 - 包括锁定和切换解码器,以及内存消耗和代码复杂性。当你的程序是IO绑定的,并且很多等待其他服务(API,数据库)返回响应时,你基本上等待空闲,并浪费资源。
异步IO的目的是在保持并发性的同时减轻线程开销,保持程序简单,避免死锁并降低复杂性。
例如关于聊天服务器。您在服务器上有数千个连接,并且您希望某些人根据他们所在的房间收到一些消息。使用线程执行此操作将比执行此异步方式复杂得多。
re deferred - 它只是一种简化代码的方式,而不是让每个函数都回调一个回调函数,等待它正在等待的操作。
另一个注意事项 - 如果你想要一个更加简单和优雅的异步IO框架,请尝试龙卷风,它基本上是异步Web服务器,具有异步http客户端和延迟替换。它编写得非常好,可以用作通用的异步IO框架。