BOOST 消息队列 线(进)程间通信性能测试

关键词:BOOST MQ 消息队列 线程间通信 性能测试 VS2022

有关如何使用boost可参考文章:

当我使用消息队列,我担心一个问题:使用消息队列将会带来多少性能损失。那么实测一下boost中的消息队列在线程间通信的时间开销。

结论:BOOST MQ不适合只有单条消息传递的情形,更适合解决批量生产和消费(并发)。

1 BOOST MQ用法简介

包含头文件并指定外部包含目录

#include <boost/interprocess/ipc/message_queue.hpp>

使用命名空间

Using namespace boost::interprocess;

创建一个队列

message_queue mq(create_only,"name",10 ,100,permissions());

向队列传递

mq.send(const void *buffer, size_type buffer_size, unsigned int priority);

从队列取出

mq.receive(void *buffer, size_type buffer_size,size_type &recvd_size,unsigned int &priority);

2 测试目的

使用线程间、进程间通信时,MQ所花费的时间开销,用于评估系统架构性能

3 测试方法

3.1连续调用

客户端:

启动计时并发送100万条消息

服务端:

接收100万条消息并终止计时

3.2单次调用

客户端:

启动计时并发送

接收并结束计时

服务端:

接收消息

发送消息

4 测试结果

计算平均每次时间花费

5 辅助工具

借助boost::timer进行计时。Boost::timer使用方法参考文章:

6 测试代码(连续调用)

7 测试代码(单次调用)

8 测试结论

8.1 连续调用平均单次约1us,相当于异步调用。

8.2 单次调用所产生的时间开销较多,可能数十毫秒,或者数十微秒。

因此在时间严格微秒级别的本地串行调用上,不可用BOOST MQ。换种说法:BOOST MQ 不适合只有一条消息传递的情形,更适合批量消息的生产和消费。

9 问题与验证

消息队列的大小是否影响性能?

生产者->生产-> 消息队列(容量1-100万进行分别测试) 消费者->消费-> ?

测试结论:影响存在,但微乎

10 在进程间通信性能如何?

测试结论:基本符合线程间的测试结果。

如果问题,可以留言给我。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值