提升lockfree队列性能问题调用boost :: lockfree :: queue push(),pop(),empty()函数

时间:2014-09-23 10:50:54

标签: c++ multithreading boost

我有2个boost :: lockfree队列。一个用于请求处理,另一个用于响应处理。

typedef boost::lockfree::queue<Request*> RequestsQueue;
typedef boost::lockfree::queue<Response*> ResponseQueue;

我有2个线程 - “SendRequest”和“ProcessResponse”,它们读取上面的无锁队列。

在程序启动时填充RequestsQueue(RequestsQueue :: push()),并且根据服务器对先前请求的响应情况,后续请求将分批发送。

void SendRequest()
    {
        while(true)
        {
            Request* reqPtr;

            while(RequestsQueue.pop(reqPtr))
            {
                //Send request to server
  

void ProcessResponse()
    {
        while(true)
        {
            Response* resPtr;

            while(ResponseQueue.pop(resPtr))
            {
                //Process response from server

一切正常,但CPU利用率非常高,达到99%。

Code :: Blocks Gprofiler告诉我问题在于pop(),empty()(不在上面的代码中,但观察到同样的问题)。 线程不断执行pop()函数,导致CPU利用率很高。

我想知道是否有人使用boost :: lockfree队列遇到了性能问题,你是如何解决这个问题的。 什么是boost :: lockfree队列的替代品?

我还检查了boost :: spsc队列,同样的问题。 CPU利用率非常高。

欢迎提出建议。

0 个答案:

没有答案