libuv简介
2017-08-16 00:00
190 查看
摘要: libuv意译
libuv是一个事件驱动型的异步IO模型, 所有的操作均采用回调函数的形式.
异步TCP,UDP socket;
异步DNS解析;
异步文件,文件系统操作;
文件系统事件;
支持ANSI转义字符控制的TTY;
支持共享IPC,UNIX域名,命名管道;
子进程支持;
进程池;
信号处理;
高分辨率时钟;
线程和同步原语;
准备好的handle会在它活动时产生回调,并且每次循环均会产生回调;
每当有新的连接时,TCP服务器handle就会调用它的相关的回调函数;
事件循环遵循常见的单线程异步输入方式. 所有(网络)的输入/输出都是在非阻塞套接字上执行的, 均使用在平台上可用的最佳机制进行轮询: Linux上的epoll, BSDs上的kqueue, SunOS上的事件端口, 以及Windows上的IOCP. 作为迭代的一部分, 循环将阻塞等待已被添加到poller的套接字上的I/O, 而回调将被触发, 指示套接字条件(可读、可写的挂起), 以便处理可以读取,写入或执行所需的输入/输出操作.
libuv能够监测多种类型的FD事件,并且支持一些常用的操作:如DNS,线程池等等.
在libuv中,所有操作均是异步操作,均需要通过回调得到其执行结果.
简介
libuv跨平台的异步IO库, 最初是为node.js而设计, 现在已作为一个健全的异步IO模型库而被广泛使用.libuv是一个事件驱动型的异步IO模型, 所有的操作均采用回调函数的形式.
特性
全功能事件循环,支持: epoll, kqueue, IOCP, event端口;异步TCP,UDP socket;
异步DNS解析;
异步文件,文件系统操作;
文件系统事件;
支持ANSI转义字符控制的TTY;
支持共享IPC,UNIX域名,命名管道;
子进程支持;
进程池;
信号处理;
高分辨率时钟;
线程和同步原语;
设计综述
handles and requests
libuv给用户提供了两个抽象的概念: handles和requests, 这两个东西与事件循环协同工作,以实现用户所需要的功能.handles(句柄)
handle表示可以在活动时执行某些操作的长期对象.一些例子:准备好的handle会在它活动时产生回调,并且每次循环均会产生回调;
每当有新的连接时,TCP服务器handle就会调用它的相关的回调函数;
Requests(请求)
Requests体现的是短周期操作.这些操作可以在handles上执行:如写请求向句柄写入数据;或者是独立的操作: 如getaddrinfo请求不依赖句柄,直接通过loop回调.I/O loop(事件循环)
I/O loop是libuv的核心. 它为所有的输入/输出操作建立了索引, 这便意味着它是一个单线程在运行. 如果要实现多线程, 那么则需要多个事件循环. libuv并不是线程安全的, 依赖于循环的API或者句柄,或者其它事件同样的不是事件安全的, 除非有额外的说明.事件循环遵循常见的单线程异步输入方式. 所有(网络)的输入/输出都是在非阻塞套接字上执行的, 均使用在平台上可用的最佳机制进行轮询: Linux上的epoll, BSDs上的kqueue, SunOS上的事件端口, 以及Windows上的IOCP. 作为迭代的一部分, 循环将阻塞等待已被添加到poller的套接字上的I/O, 而回调将被触发, 指示套接字条件(可读、可写的挂起), 以便处理可以读取,写入或执行所需的输入/输出操作.
总结
一句话总结libuv: 一切皆回调.libuv能够监测多种类型的FD事件,并且支持一些常用的操作:如DNS,线程池等等.
在libuv中,所有操作均是异步操作,均需要通过回调得到其执行结果.
相关文章推荐
- libuv 简介
- c/c++ libuv简介与编译
- PEAR简介:用PEAR来写你的下一个php程序
- 关于.NET动态代理的介绍和应用简介
- BufferedInputStream与BufferedOutputStream用法简介
- jrockit的dump操作简介
- PHP XML简介
- 简介→_→
- [转载] 微软SQL Server事务隔离级别实例简介
- Oracle体系结构之-数据库、表空间、实例简介
- MXNet设计和实现简介
- Oozie组件简介
- Spark简介
- 算法简介
- 1.简介
- Maven简介(四)——仓库
- Hibernate简介
- ASC II 完整码表及简介
- 对象模型 文档对象模型DOM简介