gpt4 book ai didi

C++ 多线程慢处理

转载 作者:行者123 更新时间:2023-11-28 03:08:42 27 4
gpt4 key购买 nike

我有多个消费者线程和一个生产者线程。生产者线程将数据写入属于某个消费者线程的映射中,并向消费者线程发送信号。当我插入和删除数据时,我在 map 周围使用了互斥体。然而,这种方法在速度性能方面看起来效率不高。你能建议另一种方法而不是 map 吗,它需要互斥锁和解锁,我认为互斥会减慢传输速度。

最佳答案

however this approach looks not efficient in terms of speed performance. Can you suggest another approach instead of map which requires mutex locks and unlocks and I think mutex slows down the transmission.

您应该使用分析器来确定瓶颈所在。


Producer thread writes the data into a map belong to a certain consumer thread and sends a signal to the consumer thread.

生产者不应该关心消费者使用什么样的数据结构——它是消费者的实现细节。请记住,将值插入映射需要内存分配(除非您使用的是自定义分配器),并且内存分配在内部也会使用锁来保护堆的状态。最终结果是围绕 map::insert 操作锁定互斥量实际上可能会锁定它太久。

一个更简单和更有效的设计是在生产者和消费者之间有一个原子队列(例如 pipeTBB concurrent_bounded_queue 预先分配其存储,以便推送/弹出操作非常快)。由于您的生产者直接与每个消费者通信,该队列是一个写入者一个读取者,并且它可以实现为无等待队列(或环形缓冲区 a-la C++ disruptor )。

关于C++ 多线程慢处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19052683/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com