问题描述
- Node js 在底层使用
libuv
为其提供事件循环功能。 - 事件循环具有特定的阶段顺序。正如 Node docs 中定义的那样,
poll
阶段负责轮询 I/O。它预先假定等待来自操作系统的通知并执行以下运行所需的回调(就我而言)。 - 据说所有事件循环代码都在主线程中执行(而且 I/O 回调似乎也应该如此)。
-
libuv
有一个线程池,用于无法以异步、非阻塞方式完成的操作。
我的问题是当线程池中的一个线程完成阻塞操作时会发生什么?然后哪个线程执行例如 I/O 操作的回调?
Colin Ihrig 展示了节点 copyFile
操作的一些复杂性。它的异步版本是使用线程池 (timecode) 中的一个线程执行的。它使用 uv__fs_done
函数进行调度,一旦操作完成,就必须调用该函数(参见视频)。看来这个函数又调用了 the callback(不幸的是,我无法彻底理解 C 代码)。
这是否意味着 libuv
线程池中的一个线程实际上执行了 I/O 回调而不是主线程作为事件循环的一部分?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)