首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LibEV如何正确缓冲?

LibEV如何正确缓冲?
EN

Stack Overflow用户
提问于 2014-03-25 20:33:25
回答 1查看 468关注 1票数 2

如何正确地创建写缓冲区?目前,我使用的是一个已分配缓冲区的链接列表,但大多数by写只有几个字节。关于创建高效的写缓冲区,您有什么建议?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-27 20:41:06

链接列表可能不是这里最好的选择。它的遍历并不是缓存友好的,因此代价很高。

您可以使用环形缓冲区1,一些使用者会将原始字节放入其中,而一些生产者稍后将获取整个可用内容,并将其发送到一个syscall中。

如果写入连续内存区域是不可取的(例如,您不能以零拷贝的方式完成),则可以将引用内存的struct放到环形缓冲区中。然后消费者将抓取所有的iovec,并将它们传递给writev 2。

说到生产者和消费者,它们可能是OS级别的线程,您必须在缓冲区周围同步它们,或者它们可能是光纤3。如果您正在执行事件驱动的应用程序,则后者更好。我有一个专用于libev的光纤实现4,您可以查看它。此外,它还包括高效的虚拟环缓冲区实现。

参考文献:

  1. buffer
  2. http://man7.org/linux/man-pages/man2/readv.2.html
  3. science)
  4. https://github.com/Lupus/libevfibers
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22645666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档