如何打破libuv中的长回调链

时间:2016-12-07 02:45:13

标签: c asynchronous libuv

假设我们从TCP套接字接收数据,并逐步处理以获取结果。每个步骤都作为一个函数实现,该函数从前一个任务参数返回到下一个结果。我们将所有这些函数链接为回调链,并将每个函数命名为 f1 f2 ... fn

此回调链中没有块函数,每个回调运行得非常快。但是,整个链的运行时间不可忽略,因此不接受在单循环迭代中运行整个链。

只需在一个回调链中链接这些函数,它就会运行:

col-xs-6

最好将这个链分成许多部分,并在一个循环迭代中运行每个部分。这看起来像:

data -> f1 -> f2 -> f3 -> f4 -> f5 ->... -> fn -> result
        |------- single loop iteration -------|

我知道在Twisted中,存在一个 deferred()来执行这样的任务。但是,在libuv中,该怎么做?

1 个答案:

答案 0 :(得分:0)

libuv没有内置API来执行此操作。你确实有一些构建块:你可以创建某种“链”结构,记住状态,并在uv_idle_t中运行它。请注意,空闲句柄可防止循环在活动时阻塞i / o。