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

从这里我发现node.js实现了非阻塞的I / O模型。 但我不明白如何。

由于JavaScript是单线程的。 单个线程如何执行I / O操作并同时执行进一步的过程。

确实,像睡眠这样的操作会阻塞线程。 但是I / O事件的确可以是asynchronous的。

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

无论何时需要数据,nodejs都会注册一个callback,并将操作发送到该事件循环。 只要数据可用,就会调用callback。

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

node.js处理的I / O在内部是multithreading的。

它是单线程和asynchronous的编程接口。

Ryan Dahl:在JSConf 2009上发表Node.js (Ryan是Node.js的创build者)

这个video将回答你的问题。

JavaScript(v8)的本质是事件callback(button onclick =“functions()”等)。 这就是I / O是multithreading的。 我们仍然需要编写我们的代码来避免仅仅通过写callback来阻塞I / O。 否则代码将等待db.query响应,并在执行下一行代码之前被阻塞。