【发布时间】:2016-12-07 02:45:13
【问题描述】:
假设我们从 TCP 套接字接收数据,并逐步处理得到结果。每个步骤都实现为一个函数,该函数从前一个任务参数并将结果返回给下一个。我们将所有这些函数链接为一个回调链,并将每个函数命名为 f1 f2 ... fn。
这个回调链中没有块函数,每个回调运行得非常快。但是整条链的运行时间是不可忽略的,所以单循环迭代运行整条链是不被接受的。
为了简单地将这些函数链接在一个回调链中,它将运行为:
data -> f1 -> f2 -> f3 -> f4 -> f5 ->... -> fn -> result
|------- single loop iteration -------|
最好将这个链分成许多部分,并在一个循环迭代中运行每个部分。这看起来像:
data -> f1 -> f2 -> f3 -> f4 -> f5 ->... -> fn-1 -> fn -> result
| loop1 | |-- loop 2 --| |- loop m -|
我知道在 Twisted 中,存在一个 deferred() 来完成这样的任务。但是,在libuv中,该怎么做呢?
【问题讨论】:
-
相信你可以使用uv_async
标签: c asynchronous libuv