【发布时间】:2016-06-28 13:42:04
【问题描述】:
考虑uv_try_write 的文档(同样适用于uv_write 和uv_write2)。
声明是:
int uv_try_write(uv_stream_t* handle, const uv_buf_t bufs[], unsigned int nbufs)
其中uv_buf_t 是一个至少具有以下字段的数据结构:
char* uv_buf_t.basesize_t uv_buf_t.len
我很确定我在这里遗漏了一些东西。
为什么应该提交多个uv_buf_t 结构而不是更大一个?
换句话说,如果我有 100 个 char 要写出来,为什么我要提交 10 个 uv_buf_t 包含每个 10 个 char 而不是一个 uv_buf_t 包含 100 个 char?
现实世界的例子会很有帮助,在这个例子中这种选择是有意义的,因为我在阅读文档时无法弄清楚。
【问题讨论】:
-
就我的理解而言,许多缓冲区意味着不同的“消息”,更大的缓冲区意味着更大的消息长度。
-
@LPs 无论如何,不同的消息是在不同的时间生成的,所以我可以在第一个可用时发送它,而没有实际理由等待下一个。我错了吗?
-
例如,您可以考虑一个“服务”,它负责发送由不同任务/线程排队的消息。
-
@LPs 必须再次实施 Nagle 算法来决定何时交付所有内容的服务?否则,一旦唤醒,为什么不能多次调用
uv_try_write?无论如何,我明白你的意思,不确定这是不是原因,但确实有道理。