繁体   English   中英

Chronicle Queue:多路复用生产者写入单个队列的推荐方法是什么?

[英]Chronicle Queue: What is the recommended way to multiplex producers to write into a single queue?

假设有 5 个生产者线程和 1 个队列。 好像我有两个选择:

  • 为每个生产者线程创建一个 appender,并发 append 并让编年史队列处理同步(启用双缓冲?)

  • 首先同步 5 个生产者线程(无锁机制,例如 disruptor),创建 1 个额外的线程和 1 个写入编年史队列的附加程序

为什么这么问?

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

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

假设您花费 1 微秒编写一条 512 字节的消息,并且您正在以 200K/s 的速度编写消息。 这意味着您的 80%ile 将因争用而额外等待队列 1 us。 但是,您将以 360 GB/h 的速度写入,因为这将很快填满一个快速 NVMe 驱动器。 相反,如果您的 20K/s 消息量相对较少,则您将 98%ile 延迟增加了 1 us。

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

我建议首先为实际吞吐量构建延迟基准。 您可以通过先写入 Wire 并仅在持有锁时复制字节来自己双重缓冲数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM