C LibEV如何正确缓冲?
如何正确创建写入缓冲区?目前,我使用的是已分配缓冲区的链接列表,但大多数的by写入只有几个字节。您对创建高效写缓冲区有何建议?链表可能不是最佳选择。它的遍历不是缓存友好的,因此代价很高 您可以使用一个环形缓冲区[1],一些使用者将原始字节放入其中,而一些生产者稍后将获取整个可用内容并在一个系统调用中发送 如果不希望写入连续内存区域(例如,不能以零拷贝方式写入),可以将引用内存的struct iovec放入环形缓冲区。然后,消费者将获取所有iovec并将其传递给writev[2] 说到生产者和消费者,它们可能是操作系统级线程,您必须在缓冲区周围同步它们,或者它们可能是光纤[3]。如果您正在执行事件驱动的应用程序,则后者更可取。我有一个专门针对libev的光纤实现[4],您可以看看。它还包括高效的虚拟环缓冲区实现 参考资料:C LibEV如何正确缓冲?,c,libev,C,Libev,如何正确创建写入缓冲区?目前,我使用的是已分配缓冲区的链接列表,但大多数的by写入只有几个字节。您对创建高效写缓冲区有何建议?链表可能不是最佳选择。它的遍历不是缓存友好的,因此代价很高 您可以使用一个环形缓冲区[1],一些使用者将原始字节放入其中,而一些生产者稍后将获取整个可用内容并在一个系统调用中发送 如果不希望写入连续内存区域(例如,不能以零拷贝方式写入),可以将引用内存的struct iovec放入环形缓冲区。然后,消费者将获取所有iovec并将其传递给writev[2] 说到生产者和消费
谢谢,我最终还是用了“环形缓冲区”这个主意。