首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >编年史队列:为多路复用生产者写入单个队列的推荐方法是什么?

编年史队列:为多路复用生产者写入单个队列的推荐方法是什么?
EN

Stack Overflow用户
提问于 2022-04-19 14:38:51
回答 1查看 170关注 0票数 1

让有5个生产者线程,和一个队列。我似乎有两个选择:

double-buffereing?)为每个生产者线程创建一个

  • ,并发追加并让编年史队列处理同步(启用
  • )

  • 首先同步5个生产者线程(如无锁机制,例如中断器),创建一个额外的线程,其中包含一个写入编年史队列

的附加线程。

为什么问这个问题?

我最初的印象是,写入编年史队列是无锁的,因此应该非常快。但是github文档多次提到,有一个写锁可以序列化并发写入。所以,我不知道放在编年史队列前面的无锁干扰器是否会提高性能?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-19 15:51:40

您建议的内容可以提高作者的性能,尤其是如果您有昂贵的序列化/编组策略。然而,如果您正在写入一个真正的磁盘,您将发现驱动器的性能可能是您最大的问题。(即使是一个快速的NVMe驱动器),您可能会发现读取数据的时间更糟。

假设您花费了1微秒来编写一条512字节的消息,并且您正在以200 K/s的速度编写消息。这意味着,由于争用,您的80%的文件将是等待队列的额外的1us。然而,您将编写360 GB/h,并将非常迅速地填充一个快速的NVMe驱动器。如果相反,您的20K/s消息的数量相对较低,那么您的98%的文件延迟将增加1 us。

简而言之,如果写争用是一个问题,那么您的驱动器可能是一个更大的问题。添加一个干扰器可以帮助作者,但它会延迟每条消息的读取时间。

我建议首先为实际吞吐量构建一个延迟基准。您可以通过先将数据写入电线,然后在保存锁的同时只复制字节,从而使数据加倍。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71926802

复制
相关文章

相似问题

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