据我所知,Node JS服务器继续在端口上侦听任何传入的请求,这意味着线程持续繁忙?什么时候从这个连续的永不结束循环中断,并检查是否有任何事件要从回调队列中处理?
2)当Node JS开始执行回调函数代码时,服务器基本上停止了吗?它不是在听取进一步的要求吗?我的意思是,因为只有一个线程可以同时执行这两个任务,所以一次只能完成一个任务吗?
这种理解是正确的还是还有更多?
答案 0 :(得分:0)
节点线程保持event loop
,并且每当任何任务完成时,它都会触发相应的事件,该事件表示事件侦听器函数被执行。 event loop
简单地遍历事件队列,该队列基本上是已完成操作的事件和回调列表。通常有一个监听事件的主循环,然后在检测到其中一个事件时触发回调函数。
http://abdelraoof.com/img/nodejs/nodejs-event-loop.png
类似的事件循环问题在这里:
来源:
http://abdelraoof.com/blog/2015/10/28/understanding-nodejs-event-loop/ http://www.tutorialspoint.com/nodejs/nodejs_event_loop.htm http://chimera.labs.oreilly.com/books/1234000001808/ch03.html#chap3_id35941348
答案 1 :(得分:0)
是的,您是对的。 nodejs中的所有内容都在主线程上运行,但I / o调用和fs文件调用除外,它们分别进入OS内核和线程池以执行。所有同步代码都在主线程上运行,并且在运行此代码时,nodejs无法处理任何其他请求。这就是为什么不建议使用long for循环的原因,因为它可能会阻塞主线程很多时间。您需要创建子线程来处理该问题。