uv_async_init
libuv中async的开端在uv_loop_init函数中:
//前面省略
err = uv_async_init(loop, &loop->wq_async, uv__work_done);
if (err)
goto fail_async_init;
uv__handle_unref(&loop->wq_async);
loop->wq_async.flags |= UV_HANDLE_INTERNAL;
//后面省略
loop->wq_async是个uv_async_t类型,它用于线程work函数调用最后处理loop->wq中的回调,暂时不用管,我在我的第五篇文章会讲到它的用途。
我们来看uv_async_init内部:
int err;
err = uv__async_start(loop);
if (err)
return err;
uv__handle_init(loop, (uv_handle_t*)handle, UV_ASYNC);
handle->async_cb = async_cb;
handle->pending = 0;
QUEUE_INSERT_TAIL(&loop->async_handles, &handle->queue);
uv__handle_start(handle)