node.js如何实现非阻塞I / O?

时间:2013-08-20 11:05:53

标签: javascript node.js nonblocking

here我发现node.js实现了非阻塞的i / o模型。但我不明白如何。

因为javascript是单线程的。单个线程如何进行I / O操作并同时执行进一步的过程。

3 个答案:

答案 0 :(得分:10)

睡眠等操作确实会阻塞线程。但I / O事件确实可以是异步的。

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

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

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

答案 1 :(得分:9)

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

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

答案 2 :(得分:0)

Ryan Dahl: Original Node.js presentation at JSConf 2009(Ryan是Node.js的创建者)

此视频将回答您的问题。

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