我参与了一项侦听web服务的任务。它将通过推送服务发送xml数据。数据必须经过一些计算,然后我们才能显示出来。
我计划通过服务监听器使用queue来存储数据,通过业务逻辑代码来读取数据。它是一个纯粹的单生产者单消费者队列。
由于我必须以web服务推送的形式接收数据,因此我必须始终打开以接收数据并将其推送到队列。我想过使用boost_lockfree_spsc_queue
。因为,如果它是一个可锁队列,侦听器必须等待一段时间才能获得锁,而boost_lockfree_spsc_queue
不需要任何锁。
我要存储的数据是
struct MemoryStruct {
char *memory;
size_t size;
};
队列是
boost::lockfree::spsc_queue<MemoryStruct*> lockFreeQ{100};
在阅读了这里的性能部分后,我有点困惑。
将此boost_lockfree_spcc_queue用于生产目的安全吗?或者我应该使用带锁的标准队列(C++ 11 )?
谢谢
发布于 2016-12-06 21:54:58
是。如果你期望负载不会使你的CPU饱和,你只会增加电费。通常的方法是指数退避。²
如果您完全不确定这一点,那么这看起来很像是过早优化,您可以使用锁定队列。
您可以确保您的使用模式可以轻松地在无锁实现中进行交换。创建您自己的阻塞pop()
函数,该函数将在无锁实现的情况下包装等待逻辑。
?请参阅http://kukuruku.co/hub/cpp/lock-free-data-structures-the-evolution-of-a-stack等
https://stackoverflow.com/questions/40996121
复制相似问题