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响应,并在执行下一行代码之前被阻塞。