我有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利用率非常高。
欢迎提出建议。