高性能的消息队列 (三)
来源:互联网 发布:图文识别软件 知乎 编辑:程序博客网 时间:2024/05/16 11:41
【Server】高性能的消息队列 (三)
分类:
最近,在为我的游戏服务器进行性能优化,而我在性能优化的过程中,首先是减少程序中锁的使用,一眼过去,发现消息队列是线程之前争锁之常地。虽然我们使用的是并发包里,性能高的并发队列(服务器是用java语言),虽然并发包在锁的设计上到了最优,采用细粒度加速,但是不可否认,在生成线程和消费线程之间的锁争用总是会消耗一定性能,降低效率。
说干就干,动手设计一个更高性能的消息队列。可是该如何动手呢?这时,我想起了N年前工厂上的生产线了,生成某个产品C是由原料进过生产线A和生成线B后生成的。生产线A专门组装C产品的A部分,生产线B专门装配C产品的B部分,同时B生产线的原料是A生成的半成品+其他来料。这时我灵光一闪。可以把A线比作生产线程,B比作消费线程。那么我的消息队列也可以这样设计,使性能提高一倍。
这时,我对设计这个队列有了初步方案:
在消息队列里,设计2个数组队列A[],B[],一个队列负责消息写入,另外一个队列供消息专门供消费。当消费队列的消息消费完毕,立即将消息写入的队列跟消息供应队列进行指针交换,使原来的消息写入队列变为消息供应队列,原来的消息供应队列变为消息写入队列,这样,我们的这个消息队列就变成了,消息生产和消息供应都在无锁的情况下进行,只是在指针交换的时候进行锁定一次。在有大量消息生产和消费的时候,性能明显提高。
这里是我初步的实现
https://github.com/codeAping/DoubleQueue
欢迎大家一起来改进和完善
原文链接:http://fsplove520.iteye.com/blog/2138326
0 0
- 【Server】高性能的消息队列 (三)
- 高性能的消息队列 (三)
- 高性能消息队列研究
- golang:高性能消息队列moonmq的简单使用
- 高性能网络编程(三)----TCP消息的接收
- 高性能网络编程(三)----TCP消息的接收
- 高性能开源持久化消息队列
- LocalMQ:从零构建类 RocketMQ 高性能消息队列
- 高性能消息队列 CKafka 核心原理介绍(上)
- 高性能消息队列 CKafka 核心原理介绍(上)
- 高性能消息队列 CKafka 核心原理介绍(下)
- PhxQueue:高可用、高可靠、高性能的分布式队列
- 高性能队列Disruptor的使用
- kafka--高性能的分布式消息系统
- 消息队列的三种模式
- 高性能阻塞队列
- 高性能、高并发消息传输系统的框架设计
- 消息队列三
- Android之RecycleView下拉刷新上滑加载更多
- .NET Core New csproj 如何发布可执行文件
- 远程连接linux的mysql服务报错10061的解决方案
- html5新增标签
- 【Zookeeper】源码分析之服务器(三)
- 高性能的消息队列 (三)
- [编程题]求序列和
- Centos7下rc.local文件开机不执行
- 2.二维数组中的查找
- 参数用一个数组还是分开几个
- Android 5.0+ 系统 WebView 可见性及合成器内存管理
- 1.zookeeper概述
- C++程序提速----测试阶段
- 使用Compute Shader加速Irradiance Environment Map的计算