You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js事件循环中pending_queue与poll_queue的回调差异

Libuv中pending_queue与poll_queue的回调区别
  • 触发时机与执行顺序
    pending_queue里的回调是事件循环迭代中优先执行的,会在I/O轮询前被全部处理完毕;而poll_queue的回调必须等I/O轮询(比如epoll/kqueue)检测到对应的I/O事件后,才会被执行,且执行顺序在pending_queue之后。

  • 触发来源
    pending_queue的回调由程序主动调度触发,不是操作系统的I/O通知——比如调用uv_async_send触发的跨线程通知回调、uv_queue_work的工作线程完成回调,或是Libuv内部的状态清理逻辑,都会被放入这个队列。
    poll_queue的回调则是由操作系统的I/O事件通知触发,只有当内核检测到某个文件描述符(如socket、文件)发生可读/可写等I/O事件时,对应的回调才会被加入队列等待执行。

  • 定位与用途
    pending_queue是处理无需等待外部I/O、需立即执行的同步/准同步任务的队列,目的是把这些任务快速处理,避免延迟到下一轮循环。
    poll_queue是Libuv处理异步I/O任务的核心队列,专门承载网络、文件等I/O操作的回调,是实现非阻塞I/O的关键部分。

内容的提问来源于stack exchange,提问作者Neetu Das

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 18:28:00