libuv 是一个跨平台支持库,围绕着事件驱动的异步I/O模型而设计。

libuv 提供不仅仅是对不同I/O轮询机制的简单抽象,还包括: 句柄对套接字和其他实体提供了高级别的抽象; 也提供了跨平台的文件I/O和线程功能。

libuv 提供给用户使用两个抽象,与事件循环相配合: 句柄请求句柄 表示能够在活动时执行特定操作的长期存在的对象。请求 代表着短期的操作。这些操作可以通过一个句柄执行: 写请求用于在句柄上写数据;或是独立不需要句柄的:getaddrinfo 请求 不需要句柄,它们直接在循环上运行。

I/O循环libuv 的核心组件。 它为全部I/O操作建立内容, 并且它必须关联到单个线程。 可以运行多个事件循环 只要每个运行在不同的线程。 libuv 事件循环 不是线程安全的 除非另行说明。

  1. 循环概念 now 被更新。 在开始事件循环计的时候事件循环缓存当前的时间以减少时间相关的系统调用的数目。
  2. 如果循环处于 活动 状态的话一次迭代开始,否则的话循环立刻终止。 那么, 何时一个循环确定是 活动 的?如果一个循环有活动的和被引用的句柄、 活动的请求或正在关闭的句柄,它被确定为 活动 的。
1
2
3
4
while there are still events to process:
e = get the next event
if there is a callback associated with e:
call the callback
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <stdlib.h>
#include <uv.h>

int main() {
uv_loop_t *loop = static_cast<uv_loop_t *>(malloc(sizeof(uv_loop_t)));
uv_loop_init(loop);
printf("Now quitting.\n");
uv_run(loop, UV_RUN_DEFAULT);
uv_loop_close(loop);
free(loop);
return 0;
}