gpt4 book ai didi

c - 如何打破 libuv 中的长回调链

转载 作者:行者123 更新时间:2023-11-30 16:53:06 25 4
gpt4 key购买 nike

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

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

为了将这些函数简单地链接到一个回调链中,它将运行为:

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中,怎么办呢?

最佳答案

libuv 没有内置 API 来执行此操作。不过,您确实有一些构建 block :您可以创建某种记住状态的“链”结构,并在 uv_idle_t 中运行它。请注意,空闲句柄在事件时可防止循环阻塞 I/O。

关于c - 如何打破 libuv 中的长回调链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41008573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com