NodeJS:调用异步函数时谁做异步工作
NodeJS: Who does the asynchronous work when a async function is called?
我将用例子来解释我的问题。
fs.readFile('somefilename', function(err, data) {
...doSomething...
});
执行此行代码后readFile
将开始读取文件。无论成功还是失败,此回调都将被推送到队列中,以便使用适当的参数执行。
读取文件asynchronously
发生,但如果 NodeJS 是单线程的、非阻塞的,谁在这样做呢?
用户代码在单个线程中执行。然而,在幕后,nodejs 使用 libuv/libio 来处理任何使用线程的 io。
https://github.com/libuv/libuv
有趣的帖子:
单线程非阻塞 IO 模型在 Node 中的工作原理.js
node.js 是否在内部使用线程/线程池?
为什么 Node.js 是单线程的?
Node.js是一个事件驱动的服务器。这并不意味着它使用多线程。
作为事件驱动的,Node.js可以同时处理多个请求。基本上,当它收到请求时,Node.js 会启动其执行。在执行时,Node.js 收到另一个请求,它将启动其执行。等等。当第一个请求完成执行并且结果可用时,它会触发一个事件,通知 Node.js 此请求已完成,然后 Node.js 发回请求结果。
更多信息可以在 Node.js 网站上找到,更多信息可以在这里找到。
相关文章:
- learnyounode杂耍异步解决方案不工作
- "此网站似乎使用滚动链接定位效果.这可能不能很好地与异步平移一起工作;
- 异步加载的SVG过滤器feColorMatrix在Chrome中工作,而不是在Safari或Firefox中
- 将异步工作流更改为承诺(蓝鸟)
- 我可以在 MVC 3.0 中获得一个工作 Asp.NET jsTree 4 示例,并异步加载节点
- 节点 JS 使用异步请求同步工作流
- 异步功能在预期结果时停止工作
- ngInit 不异步工作($q承诺)
- 在最终回调中嵌套异步函数如何工作
- 谷歌的收件箱异步调用是如何工作的
- 我很奇怪“异步”模块不能很好地工作
- NodeJS:调用异步函数时谁做异步工作
- 两个异步模块函数异步工作
- 窗口滚动在 Safari 中异步工作
- POST请求在AJAX中不能异步工作
- $q不能异步工作
- Meteor WrapAsync异步工作
- & lt; iframe>异步工作
- 在无重启扩展中与jsctypes异步工作
- Twitter typeahead.js process()调用不能异步工作