纪录|多写单读并发流与cameron、tbb并发队列性能对比

我的作品ConcurrencyWriteStream,提供多线程写单线程读+多线程探测有无数据的功能,其元素不定长,可用于直接存储多类型lambda作为异步任务调度核心。
cameron似乎是目前网络上最优化的并发队列,提供了多(线程)写多读并发功能,其元素为泛型T。
tbb的concurrent_queue与其类似。
boost的并发队列各方面性能都不如tbb,因此性能数据不列出。

(以下单位均为M/s 百万次每秒)
注:new/malloc的性能大致为单线程25M/s数量级。
std::queue的性能大致为入队70M,出队670M。
基于锁的1线程写1线程读队列提供5M的出入能力,3写1读1.6M。

CPU@E3 1230v2 3.3GHz. DDR3 1600 16G.

M单位是百万次每秒cameron并发队列tbb并发队列CWS多写单读流CWS流(单线程版)ringbuf(c语言)
github星多的,
其他c++不支持多线程写入
1线程入队①88M
令牌60M
33.4M32M
令牌59M
104M(达到1亿次)
2线程入队84.7M11.1M31.6M
令牌42.5M
不支持
4线程入队80.9M7.3M32M
令牌40.3M
不支持
预插入后,
测1线程出队
34M47.62M120M130M(达到1.3亿次)
预插入后,
测2线程出队
7.0M
令牌6M
11.1M不支持不支持
预插入后,
测4线程出队
3.8M
令牌4.3M
5.1M不支持不支持
1线程入队
1线程出队
15M
令牌22.79M
15.8M36.5M
令牌51M
单写77M
单写83M@9900kf ddr4
轮流入出,各127M
(自产自销)
85M
必须注册工作线程,
空间尺寸固定
2线程入队
1线程出队
34.6M
令牌49M
不支持22M
3线程入队
1线程出队
22.5M
令牌30.5M
19.43M33.4M
令牌47M
不支持12M
7线程入队
1线程出队
(只有4线程+4超线程)
22.62M
令牌30.55M
22.21M29M
令牌40M
不支持7.7M

注①:仅入队性能高是没有用的,最终还是要看出队性能。
注②:CPU核心数与线程数足够时,每个独立CWS流可以分别提供20~30M op/s的IO,总IO能力可以随CWS流的数量近乎线性地增长。
注③:所谓令牌指的是提高连续插入时性能的由调用者持有的辅助变量,与批量插入不同

CWS在上述对比中,可能不太突出,但是注意CWS具备不定长元素支持能力,而其他并发队列通常需要用new配合,仅就new int 和malloc(4) 而言就需要单线程每秒能支撑25M次申请(不含释放),与并发队列组合后,显然组合后性能用数学算法简单可得1(1/80M+1/25M)=19M,并且由于其糟糕的内存分布性质,内存不友好,性能必然继续下降。奇虎360的Github项目EVPP中使用的基于cameron的多生产者单消费者的异步任务队列,在其评测中提供了4M/s的调度能力(https://github.com/Qihoo360/evpp/blob/master/docs/benchmark_lockfree_vs_mutex_cn.md),而基于CWS的异步调度队列,仍然提供25M+/s的超高性能。

另外cameron具备批量插入能力,性能可达200M/s ~ 300M/s。然而CWS理论上可以插入一个大对象,然后在以单线程方式将其分割成大量小对象,这个过程是完全并行独立的。(CWS对申请4字节元素或100字节元素,性能上几乎不敏感,影响速度很小)。可以预期插入性能同样能达到10倍~20倍。但是在实际应用过程中,批量插入几乎是用不到的。

CWS多线程投递lambda,
单线程逐个执行并销毁lambda(次)
ringbuf投递字符数据(次)
1线程27M64M
2线程22M22M

最后CWS内部数据还有在并行环境下,直接整体压缩、批量存储到文件、发送到网络的特别功能,这是其他并发队列所无法做到的。


3.3GHz cpu 实现 77Mop/s意味着45个cpu周期,13ns完成一个数据的投递。


CPU对比

E3 1230v2 3.3GHz 4核心8线程 ddr3 77M op/s
I9 9900kf 3.6GHz 8核16线程 ddr4 83M op/s
腾讯云E5-26xx v4 1核心1线程 2.39GHz 36M op/s

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值