boost::lockfree::queue记录

(1)pop的坑

boost::lockfree::queue<Point *> msgQueue;

若循环中如下调用

Point * pPoint = NULL
msgQueue.pop(pPoint);

若pop返回值是false,一般按常理会认为pPoint是空值,但是实际测试中pPoint不是空值。所以不能以pPoint的值是否改变作为后续逻辑的判断条件。


(2)队列测试

测试环境1:
500个模拟客户端,消息发送量大概在8229.033个/秒左右
发送效率对比:
原有消息队列
12:54:10.309 5916 ACTION_ERROR: count:29000000, MaxTime:4.8850, avg:0.0125

新消息队列:
14:10:29.335 3272 ACTION_ERROR: count:29000000, MaxTime:2.7910, avg:0.0039

接受消息队列对比
原有消息队列
14:51:40.322 5600 ACTION_ERROR: Recv count:3290000, MaxTime:2.8870, avg:0.0015

新消息队列
14:40:27.211 4908 ACTION_ERROR: Recv count:3290000, MaxTime:2.3850, avg:0.0013

(2)测试环境2:
1250个模拟客户端,消息发送量大概在17796.066个/秒左右

发送效率对比:
原有消息队列
16:26:47.687 4196 ACTION_ERROR: Send count:4300000, MaxTime:24.2220, avg:0.0024

新消息队列
16:35:59.948 3552 ACTION_ERROR: Send count:4300000, MaxTime:27.2790, avg:0.0014

接受消息对比
原有消息队列
16:14:54.385 5684 ACTION_ERROR: Recv count:4900000, MaxTime:25.7500, avg:0.0009

新消息队列
16:05:45.348 5124 ACTION_ERROR: Recv count:4900000, MaxTime:35.9960, avg:0.0003

(3)结论
低负载的时候:
发送消息的效率大概是原有队列的3倍
接收消息的效率大概是原有队列的1.1倍
高负载的时候:
发送消息的效率大概是原有队列的1.58倍
接收消息的效率大概是原有队列的3倍


测试参考代码:

LARGE_INTEGER counterStart;
QueryPerformanceCounter(&counterStart);


/*此处可以换成发送*/
if (!m_pNetMgrMsgPort->Recv(PORT_ANY, PACKET_ANY, STRUCT_TYPE(buf), buf,
&cStatus)) {
break;
}




LARGE_INTEGER counterEnd;
QueryPerformanceCounter(&counterEnd);


LARGE_INTEGER frequency;
QueryPerformanceFrequency(&frequency);


long lTime = (long)((counterEnd.QuadPart - counterStart.QuadPart) * 1000 / (double)frequency.QuadPart * 1000);
static unsigned int unTotal = 0;
static unsigned int i = 0;
static long slTotalTime = 0.0;
static long lMaxTime = 0.0;
InterlockedIncrement(&i);
InterlockedIncrement(&unTotal);
InterlockedExchangeAdd(&slTotalTime, lTime);


if (lTime > lMaxTime)
{
lMaxTime = lTime;
}

if (i % 5000 == 0)
{
static int j = 0;
j++;
LOG ("Recv count:%d, MaxTime:%4.4f, avg:%4.4f\n", unTotal, lMaxTime / 1000.0, slTotalTime / (double)i / 1000.0);


// if (j >= 9)
// {
// lMaxTime = 0.0;
// slTotalTime = 0;
// j = 0;
// i = 0;
// }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不二星空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值