专栏首页原创分享nodejs事件循环阶段之poll io

nodejs事件循环阶段之poll io

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观察者

// 初始化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。

本文分享自微信公众号 - 编程杂技(theanarkh),作者:theanarkh

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • libuv源码分析之stream第一篇

    流的实现在libuv里占了很大篇幅,今天分析一下流的实现。首先看数据结构。流在libuv里用uv_stream_s表示,他属于handle族。继承于uv_han...

    theanarkh
  • 点击劫持和防御

    攻击方法: 首先自己写一个页面,接着用iframe引入其他的页面,然后自己利用定位和z-index对原页面进行覆盖和'重绘',当用户在输入时,以为是正常的页面,...

    theanarkh
  • 理解nodejs中js和c++的通信原理

    本文分享一下nodejs中js调用c++模块的一些内容。js调用c++模块是v8提供的能力,nodejs是使用了这个能力。这样我们只需要面对js,剩下的事情交给...

    theanarkh
  • 机器视觉(第4期)----工业相机综述及接口介绍

    上期我们一起学习了镜头的相关知识,戳下链接: 机器视觉(第3期)----图像采集之镜头原理详述 这期我们一起学习相机和接口的相关知识,工业相机是机器视觉系统中的...

    智能算法
  • 深度相机原理揭秘--双目立体视觉

    基于双目立体视觉的深度相机类似人类的双眼,和基于TOF、结构光原理的深度相机不同,它不对外主动投射光源,完全依靠拍摄的两张图片(彩色RGB或者灰度图)来计算深度...

    小白学视觉
  • Frame.io使用Falco围绕其视频云建立了完整的安全程序

    从Netflix到Fox Sports和Vice,一些最著名的视频和电影内容创作者都使用Frame.io平台,用于基于云的审查和跨多个团队的协作。考虑到客户面临...

    CNCF
  • 初识视觉SLAM:用相机解决定位和建图问题

    SLAM 是Simultaneous Localization and Mapping 的缩写,中文译作“同时定位与地图构建”。它是指搭载特定传感器的主体,在没...

    博文视点Broadview
  • 34. 光场--捕获场景中所有的光线

    在27. HDR - 高动态范围成像中,我向你介绍了把多个不同曝光程度的有限动态范围的图像融合起来,我们可以得到高动态范围的图像

    HawkWang
  • 工业相机 效用几何

    文/李智勇,堡盟电子 如今,人工智能被称为经济发展的新引擎,而做为人工智能核心技术之一的视觉技术也的确火了,火到凡是和工业自动化相关的企业,如果不搞点视觉技术或...

    企鹅号小编
  • Facebook Surround360 学习笔记--(2)算法原理

    本篇从宏观上介绍surround360的算法流程和每个步骤的原理,主要参考surround360官方网页(见参考)上的介绍。 Surround360开源项目包含...

    用户1150922

扫码关注云+社区

领取腾讯云代金券