node.js - 在单一线程编程模型中,node.js 如何进行异步编程?

  显示原文与译文双语对照的内容
113 1

我正在查看 node.js的细节,并且了解它支持异步编程,但本质上它提供了一个单线程模型。

如何在这种情况下处理异步编程?就像运行时本身创建和管理线程一样,但是程序员不能显式创建线程?如果有人能指出一些资源来了解这个问题,那将是非常棒的。

时间:原作者:0个回答

66 4

现在跟我说:异步编程并不一定意味着多线程。

Javascript是单个线程运行时- 你不能在JS中创建新线程,因为语言/运行时不支持它。

Frank说它用英语正确地说:有一个主事件循环,当事情进入你的应用程序时,它会处理。因此,"处理这里HTTP请求"将被添加到事件队列,然后在适当时由事件循环处理。

当你调用异步操作( 一个mysql数据库查询,例如) 时,node.js 向mysql发送"嘿,执行这个查询"。由于这个查询需要花费一些时间,( 毫秒) 使用MySQL异步库执行查询- 回到事件循环并在等待MySQL返回给我们的时候进行其他操作。像处理HTTP请求那样。

收费 : 相反,node.js 可以简单地等待( 不执行任何操作),让mysql回到它的位置。这称为同步调用。想象一下一个餐厅,你的服务员把订单提交给厨师,然后在菜单上 twiddles/她的拇指。在一个餐厅,如在 node.js 程序中,这种行为是傻的- 你拥有它的他客户,需要服务。因这里,你希望尽可以能异步地为服务器( 或者 node.js 进程) 服务,因为它们可以以为你服务多个人。

编辑完成

Node.js 使用C 库与mysql通信,因此技术上这些C 库可以脱离线程,但是 inside Javascript不能处理线程。

原作者:
...