7

这里我发现node.js实现了非阻塞 i/o 模型。但我不明白怎么做。

由于 javascript 是单线程的。单个线程如何执行 i/o 操作并同时执行进一步的进程。

4

3 回答 3

10

确实,诸如 sleep 之类的操作会阻塞线程。但是 I/O 事件确实可以是异步的。

Node.js 为此使用了一个事件循环。事件循环是“处理和处理外部事件并将其转换为回调调用的实体”</p>

每当需要数据时,nodejs 都会注册一个回调并将操作发送到此事件循环。只要数据可用,就会调用回调。

http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/了解更多信息

于 2013-08-20T11:11:02.403 回答
9

处理的 I/O 在node.js内部是多线程的。

它是单线程和异步的编程接口。

于 2013-08-20T11:10:08.180 回答
0

Ryan Dahl:JSConf 2009 上的原始 Node.js 演示文稿(Ryan 是 Node.js 的创建者)

该视频将回答您的问题。

JavaScript(v8) 的本质是事件回调(按钮 onclick="functions()" 等)。这就是 I/O 是多线程的。我们仍然需要编写代码来避免阻塞 I/O,只需要编写回调;否则代码将等待 db.query 响应并在执行下一行代码之前被阻塞。

于 2014-04-15T05:56:15.797 回答