nodejs事件循环阶段之poll io

2020-03-12 20:29:32 浏览数 (1)

poll io是nodejs非常重要的一个阶段,文件io、网络io、信号处理等都在这个阶段处理。这也是最复杂的一个阶段。处理逻辑在uv__io_poll这个函数。这个函数比较复杂,我们分开分析。 开始说poll io之前,先了解一下他相关的一些数据结构。 1 io观察者uv__io_t。这个结构体是poll io阶段核心结构体。他主要是保存了io相关的文件描述符、回调、感兴趣的事件等信息。 2 watcher_queue观察者队列。所有需要libuv处理的io观察者都挂载在这个队列里。libuv会逐个处理。 我们看如何初始化一个io观察者

代码语言:javascript复制
// 初始化io观察者
void uv__io_init(uv__io_t* w, uv__io_cb cb, int fd) {
  // 初始化队列,回调,需要监听的fd
  QUEUE_INIT(&w->pending_queue);
  QUEUE_INIT(&w->watcher_queue);
  w->cb = cb;
  w->fd = fd;
  // 上次加入epoll时感兴趣的事件,在执行完epoll操作函数后设置
  w->events = 0;
  // 当前感兴趣的事件,在再次执行epoll函数之前设置
  w->pevents = 0;
}

我们再看一下如何注册一个io观察到libuv。

0 人点赞