【发布时间】:2013-06-10 15:41:51
【问题描述】:
当使用 uv_run 函数在 libuv 中运行事件循环时,有一个“mode”参数与以下值一起使用:
UV_RUN_DEFAULT
UV_RUN_ONCE
UV_RUN_NOWAIT
前两个很明显。 UV_RUN_DEFAULT 运行事件循环,直到没有更多事件,UV_RUN_ONCE 处理循环中的单个事件。但是,UV_RUN_NOWAIT 似乎不是一个单独的模式,而是一个可以与其他两个值之一进行或运算的标志。
默认情况下,这个函数会阻塞直到事件处理完毕,UV_RUN_NOWAIT 使它成为非阻塞的,但我能找到的任何文档都到此为止。我的问题是,如果你非阻塞地运行事件循环,回调是如何处理的?
libuv 事件模型是单线程的(反应器模式),所以我假设它需要阻塞才能调用回调,但是如果主线程被占用,事件处理后会发生什么?回调是否会被“排队”直到 libuv 再次控制主线程?还是会在另一个线程上分派回调?
【问题讨论】:
标签: c nonblocking libuv evented-io