如何正确地创建写缓冲区?目前,我使用的是一个已分配缓冲区的链接列表,但大多数by写只有几个字节。关于创建高效的写缓冲区,您有什么建议?
发布于 2014-03-27 20:41:06
链接列表可能不是这里最好的选择。它的遍历并不是缓存友好的,因此代价很高。
您可以使用环形缓冲区1,一些使用者会将原始字节放入其中,而一些生产者稍后将获取整个可用内容,并将其发送到一个syscall中。
如果写入连续内存区域是不可取的(例如,您不能以零拷贝的方式完成),则可以将引用内存的struct放到环形缓冲区中。然后消费者将抓取所有的iovec,并将它们传递给writev 2。
说到生产者和消费者,它们可能是OS级别的线程,您必须在缓冲区周围同步它们,或者它们可能是光纤3。如果您正在执行事件驱动的应用程序,则后者更好。我有一个专用于libev的光纤实现4,您可以查看它。此外,它还包括高效的虚拟环缓冲区实现。
参考文献:
https://stackoverflow.com/questions/22645666
复制相似问题