微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果有阻塞操作,线程会执行什么 I/O 回调?

如何解决如果有阻塞操作,线程会执行什么 I/O 回调?

  • 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 举报,一经查实,本站将立刻删除。