了解异步IO:vs异步编程

时间:2016-05-31 02:45:37

标签: python node.js asynchronous io twisted

我很难理解异步IO,所以我希望能够澄清一些误解,因为“#synchronous”异步"似乎被抛出了很多。如果重要的话,我的目标是进入扭曲的python,但我希望对基本概念有一个大致的理解。

异步编程究竟是什么?是使用支持异步IO的语言和操作系统进行编程吗?还是更普遍的东西?换句话说,异步IO是异步编程的一个独立概念吗?

1 个答案:

答案 0 :(得分:3)

异步IO意味着当您的计算机等待某些内容时,应用程序不会被阻止。这里等待的定义不是处理。等待网络服务器?等待网络连接?等待硬盘驱动器响应盘片上的数据?所有这些都是IO。

通常情况下,您可以通过非常简单的方式同步编写:

let file = fs.readFileSync('file');
console.log(`got file ${file}`);

这会阻止,在readFileSync返回你要求的内容之前不会发生任何事情。或者,您可以异步执行此操作,但不会阻止。这完全不同。在引擎盖下它可能正在使用中断。它可能是使用select语句轮询句柄。它通常使用与低级库(例如libc)的不同绑定。这就是你需要知道的全部内容。那会弄湿你的脚。以下是我们的看法,

fs.readFile(
  'file',
  function (file) {console.log(`got file ${file}`)}
);

在此,你提供了一个"回调"。该函数将立即请求文件,当它(您调用的函数,这里fs.readFile)获取文件后,它将调用您的回调(这里是一个需要的函数)一个参数文件。

异步写东西很困难:

  • 如果使用回调,则创建金字塔代码。
  • 错误可能更难确定。
  • 垃圾收集并不总是干净。
  • 性能开销和内存开销。
  • 如果与同步代码混合,可能会造成难以调试的情况。

所有这些都是异步编程的艺术。