让有5个生产者线程,和一个队列。我似乎有两个选择:
double-buffereing?)为每个生产者线程创建一个
的附加线程。
为什么问这个问题?
我最初的印象是,写入编年史队列是无锁的,因此应该非常快。但是github文档多次提到,有一个写锁可以序列化并发写入。所以,我不知道放在编年史队列前面的无锁干扰器是否会提高性能?
发布于 2022-04-19 15:51:40
您建议的内容可以提高作者的性能,尤其是如果您有昂贵的序列化/编组策略。然而,如果您正在写入一个真正的磁盘,您将发现驱动器的性能可能是您最大的问题。(即使是一个快速的NVMe驱动器),您可能会发现读取数据的时间更糟。
假设您花费了1微秒来编写一条512字节的消息,并且您正在以200 K/s的速度编写消息。这意味着,由于争用,您的80%的文件将是等待队列的额外的1us。然而,您将编写360 GB/h,并将非常迅速地填充一个快速的NVMe驱动器。如果相反,您的20K/s消息的数量相对较低,那么您的98%的文件延迟将增加1 us。
简而言之,如果写争用是一个问题,那么您的驱动器可能是一个更大的问题。添加一个干扰器可以帮助作者,但它会延迟每条消息的读取时间。
我建议首先为实际吞吐量构建一个延迟基准。您可以通过先将数据写入电线,然后在保存锁的同时只复制字节,从而使数据加倍。
https://stackoverflow.com/questions/71926802
复制相似问题