http://libuv.org/

目录

概述¶

功能

文档

下载

安装

设计概述¶

把手和请求¶

I / O循环

文件I /


概述¶

libuv是一个多平台支持库,主要关注异步I / O。它主要通过开发使用Node.js的,但它也使用了Luvit, 朱莉娅,pyuv,和其他人。

注意

如果您在本文档中发现错误,可以发送拉取请求来帮助您 !

功能

  • 由epoll,kqueue,IOCP和事件端口支持的功能齐全的事件循环。
  • 异步TCP和UDP套接字
  • 异步DNS解析
  • 异步文件和文件系统操作
  • 文件系统事件
  • ANSI转义码控制的TTY
  • 具有套接字共享的IPC,使用Unix域套接字或命名管道(Windows)
  • 子进程
  • 线程池
  • 信号处理
  • 高分辨率时钟
  • 线程和同步原语

文档

  • 设计概述
  • API文档
  • 用户指南
  • 升级中

下载

可以从这里下载libuv 。

安装

安装说明可在README中找到。

设计概述¶

libuv是跨平台支持库,最初是为Node.js编写的。它是围绕事件驱动的异步I / O模型设计的。

该库提供的不只是对不同I / O轮询机制的简单抽象:“句柄”和“流”为套接字和其他实体提供了高级抽象;还提供跨平台文件I / O和线程功能。

这是说明组成libuv的不同部分以及它们与哪个子系统有关的图:

把手和请求¶

libuv与事件循环结合为用户提供2种抽象的处理方式:句柄和请求。

句柄表示活动时能够执行某些操作的长寿命对象。一些例子:

  • 准备句柄在活动时每次循环迭代都会调用一次其回调。
  • 一个TCP服务器句柄在每次有新连接时都会调用其连接回调。

请求代表(通常)短暂的操作。这些操作可以在一个句柄上执行:写请求用于在句柄上写数据;还是独立运行:getaddrinfo请求不需要直接在循环上运行的句柄。

I / O循环

I / O(或事件)循环是libuv的核心部分。它建立所有I / O操作的内容,并且将其绑定到单个线程。只要每个事件循环在不同的线程中运行,就可以运行多个事件循环。除非另有说明,否则libuv事件循环(或与此有关的任何其他涉及循环或句柄的API)都不是线程安全的

事件循环遵循通常的单线程异步I / O方法:所有(网络)I / O在非阻塞套接字上执行,这些套接字使用给定平台上可用的最佳机制进行轮询:Linux上的epoll,OSX上的kqueue和其他BSD,SunOS上的事件端口和Windows上的IOCP。作为循环迭代的一部分,循环将阻止等待已添加到轮询器中的套接字上的I / O活动,并且将触发回调以指示套接字条件(可读,可写挂起),以便句柄可以读取,写入或执行所需的I / O操作。

为了更好地了解事件循环的运行方式,下图说明了循环迭代的所有阶段:

  1. “ now”的循环概念已更新。为了减少与时间相关的系统调用的数量,事件循环在事件循环滴答的开始处缓存当前时间。

  2. 如果循环是活动 的,则开始迭代,否则循环将立即退出。那么,什么时候认为循环还活着?如果循环具有活动句柄和引用句柄,活动请求或关闭句柄,则认为该循环是活动的

  3. 到期计时器运行。计划在循环概念之前的某个时间的所有活动计时器现在 将调用其回调。

  4. 调用待处理的回调。大多数情况下,在轮询I / O之后立即调用所有I / O回调。但是,在某些情况下,调用此类回调会推迟到下一个循环迭代。如果先前的迭代推迟了任何I / O回调,则它将在此时运行。

  5. 空闲句柄回调被调用。尽管名称很不幸,但如果空闲句柄处于活动状态,则会在每次循环迭代中运行它们。

  6. 准备句柄回调。准备句柄在循环将阻止I / O之前立即调用其回调。

  7. 计算轮询超时。在阻塞I / O之前,循环会计算阻塞的时间。这些是计算超时的规则:

    • 如果使用该UV_RUN_NOWAIT标志运行循环,则超时为0。
    • 如果要停止循环(uv_stop()被调用),则超时为0。
    • 如果没有活动的句柄或请求,则超时为0。
    • 如果有任何空闲的句柄处于活动状态,则超时为0。
    • 如果有任何要关闭的句柄,则超时为0。
    • 如果以上情况均不匹配,则采用最接近的定时器超时,或者如果没有活动的定时器,则为无穷大。
  8. I / O的循环块。此时,循环将在上一步计算的持续时间内阻止I / O。此时,监视给定文件描述符的读写操作的所有与I / O相关的句柄都将调用其回调。

  9. 检查句柄回调被调用。在为I / O阻塞循环之后,检查句柄立即调用其回调。检查手柄本质上是准备手柄的对应物。

  10. 关闭回调被调用。如果通过调用关闭了句柄uv_close(),则将调用close回调。

  11. 如果循环使用来运行UV_RUN_ONCE,则为特例,因为这意味着前进。阻止I / O后可能没有触发任何I / O回调,但是经过了一段时间,因此可能有到期的计时器,这些计时器将调用其回调。

  12. 迭代结束。如果循环以UV_RUN_NOWAITUV_RUN_ONCE模式运行,则迭代结束并uv_run()返回。如果运行了循环,UV_RUN_DEFAULT 那么如果循环仍然存在,它将从头开始继续运行,否则也将结束。

重要

libuv使用线程池使异步文件I / O操作成为可能,但是网络I / O 始终在单个线程(每个循环的线程)中执行。

注意

尽管轮询机制不同,但是libuv使执行模型在Unix系统和Windows之间保持一致。

文件I /

与网络I / O不同,libuv没有依赖于平台的文件I / O原语,因此当前方法是在线程池中运行阻止文件I / O操作。

要全面了解跨平台文件I / O的情况,请查看 这篇文章。

libuv当前使用全局线程池,所有循环都可以在该线程池上排队工作。当前在此池上运行3种类型的操作:

  • 文件系统操作
  • DNS函数(getaddrinfo和getnameinfo)
  • 用户指定的代码通过 uv_queue_work()

警告:有关更多详细信息,请参见“ 线程池工作调度”部分,但是请记住,线程池的大小非常有限。

  • Introduction

    • Who this book is for
    • Background
    • Code
  • Basics of libuv
    • Event loops
    • Hello World
    • Error handling
    • Handles and Requests
  • Filesystem
    • Reading/Writing files
    • Filesystem operations
    • Buffers and Streams
    • File change events
  • Networking
    • TCP
    • UDP
    • Querying DNS
    • Network interfaces
  • Threads
    • Core thread operations
    • Synchronization Primitives
    • libuv work queue
    • Inter-thread communication
  • Processes
    • Spawning child processes
    • Changing process parameters
    • Detaching processes
    • Sending signals to processes
    • Signals
    • Child Process I/O
    • Parent-child IPC
  • Advanced event loops
    • Stopping an event loop
  • Utilities
    • Timers
    • Event loop reference count
    • Idler pattern
    • Passing data to worker thread
    • External I/O with polling
    • Check & Prepare watchers
    • Loading libraries
    • TTY
  • About

libuv:多平台支持库-异步I / O相关推荐

  1. Windows 平台下面的IOCP技术 Linux下面Epoll 还有FreeBSD下面Kqueue的应用了。跨平台库行业里面最出名的莫过于ACE、ASIO(Boos公司)两大支持库支持IOCP

    http://wenku.baidu.com/view/4117460502020740be1e9b3c.html 游戏服务器集群 自从2003年开发VOIP Radius Server以及修改Gnu ...

  2. C/C++开发,无可避免的多线程(篇二).thread与其支持库

    目录 一.原子类型与原子操作 1.1 原子类型与操作介绍 1.2 c++11的原子类型 1.3 原子操作功能与应用 1.4 原子布尔类型 1.5 原子操作-内存同步顺序 二. 原子操作库 2.1 原子 ...

  3. androidx和android的区别,【译】使用AndroidX代替Android支持库

    今天,我们发布一个新的Android扩展库(AndroidX)的早期预览版,这表示了支持库的一个新的时代.请为这些变化提出你们的反馈.既然这是一个早期的预览版本,我们并不建议放在生产环境尝试这些功能, ...

  4. DCMTK 3.6.2(MD支持库)与Microsoft Visual Studio 2017开发环境的搭建

    DCMTK 3.6.2(MD支持库)与Microsoft Visual Studio 2017开发环境的搭建 DCMTK 362MD支持库与Microsoft Visual Studio 2017开发 ...

  5. Android 测试支持库 1.0 现已发布!

    我们非常高兴地宣布,Android 测试支持库 (ATSL) 1.0 版现已发布. ATSL 1.0 版对现有测试 API 进行了重要更新,不仅添加了许多新功能.还提升了性能和稳定性,同时还修复了若干 ...

  6. 2023年,“新一代”固定资产管理平台——支持低代码平台

    固定资产是各企业和工厂的主要生产要素,占企业整体资金比例较重,而且随着企业的发展,实物资产的数量和员工日益增多,固定资产的重要性日益凸显.如何高效管理这些实物资产也成了企业管理者经常考虑的问题.单纯依 ...

  7. Moodle平台题库建设技术

    Moodle平台题库建设技术 简述 GIFT格式特点及支持的题目类型 一.开始制作 1.判断题 2.单选题 3.多选题 4.数值题 5.简答题 6.描述性文本 7.匹配题 二.题目选项 行注释 题目名 ...

  8. LDAC在QCC平台支持情况(HIFI选型指南)

    LDAC在QCC平台支持情况(HIFI选型指南) 概述 这里只讲经过授权的.Sony官方承认的平台支持情况.作为DSP编解码库,只有那些支持DSP编程的QCC平台才支持. 本节也可作为HIFI选型指南 ...

  9. 工作邦智慧水务云平台支持的20+硬件

    "工作邦智慧水务云平台"是一个软件硬件深度结合的平台,硬件来自于合作多年的行业合作伙伴.通过与硬件的深度结合,水务云平台架构比较完整,业务办理更加流畅.操作更加快捷. 下面是平台支 ...

最新文章

  1. 从AndroidStudio同步上传项目代码到GitHub
  2. 使用read_html爬取网页表哥,Python笔记:用read_html()爬取table形式表格的网络数据...
  3. ubuntu dpkg mysql_ubuntu-12.04 – 在Ubuntu 12.04上无法启动MySQL5.5 – “dpkg:依赖问题”...
  4. java 序列化异常_关于spring:Java序列化异常消息
  5. CUDA、SU、MPI和Madagascar混合编程的Makefile文件配置
  6. Getway 中predicates: - Query=x 标签作用
  7. 2022-2028全球与中国卫星地面网络科技市场现状及未来发展趋势
  8. 苹果开发者证书报错证书不受信任
  9. 关于申请博客园开通博客功能
  10. 怎样取消php加密mppe,PHP 加密问题 求大神帮忙? 谢谢
  11. 未得冠军的运动员也有教练——Leo鉴书71
  12. web下载文件夹的解决方案
  13. 2022年「博客之星」参赛博主:落寞的魚丶
  14. CSS图片底部留白的解决办法
  15. mysql实现自增字符串_Mysql实现字符串主键自增示例教程-Go语言中文社区
  16. mv150us无线网卡驱动linux,水星MW150US2.0驱动-水星MW150US无线网卡驱动下载v2.0 官方最新版-西西软件下载...
  17. 【ALGO】模拟退火(1)
  18. FPGA的BRAM和distributed RAM学习
  19. 常用的遥感植被指数介绍
  20. com.android.phone目录,手机开机一直显示quot;com.android.phone已停止quot;肿么弄

热门文章

  1. Kafka集群全部断开,然后重启时报“The broker is trying to join the wrong cluster. Configured zookeeper.connect……”问题
  2. 【2019.09.08】2019icpc南昌网络赛
  3. PHP7实战开发简单CMS内容管理系统(11)批量删除栏目数据
  4. 前端如何展示商品属性:SKU多维属性状态判断算法的应用-Vue 实现
  5. 求计算两个时间的差(DateTime类和TimeSpan类)
  6. 文本框中只能输入小于等于100的正整数
  7. [裴礼文数学分析中的典型问题与方法习题参考解答]5.1.16
  8. EZGUI下的动态图片的处理
  9. Repeater绑定ArrayList数据源
  10. 9-Mybatis 多表查询之一对多