笔者写过libevent及boost.asio的有关介绍,另一个网络库libuv也得到广泛应用,似乎应该把libuv的介绍补上,因此就有了本文。本文仅是对libuv的概要描述,细节应该参考其官方文档(http://docs.libuv.org/en/v1.x/api.html),这也是本文的主要参考依据。这里涉及libuv的版本为1.39.0,例子的运行环境为windows10。
一、libuv各种结构
表1 各种核心结构
用于消息循环的各种核心结构,libuv的主要功能就从这些结构及其相关函数体现
uv_loop_t — Event loop |
事件循环结构体,用于表达事件循环“上下文”,通过操作它来操作事件循环(初始化、起、停等),一个线程一个 |
uv_handle_t — Base handle |
以下事件的“基结构”(以下事件都包含它), |
uv_req_t — Base request |
以下请求事件的“基结构” |
uv_timer_t — Timer handle |
用于定时器事件 |
uv_prepare_t — Prepare handle |
每轮事件循环,事件例程前,会调用一次prepare例程 |
uv_check_t — Check handle |
每轮事件循环,事件例程后,会调用一次check例程 |
uv_idle_t — Idle handle |
每轮事件循环,prepare例程前,会调用一次idle例程,有idle例程时,运行不会阻塞,而是不断循环 |
uv_async_t — Async handle |
用于另一个线程对本线程事件循环的事件的通知 |
uv_poll_t — Poll handle |