高性能的消息队列 (三)

    xiaoxiao2021-03-25  139

    【Server】高性能的消息队列 (三)

    标签: 高性能server性能优化并发消息队列   596人阅读  评论(1)  收藏  举报   分类: 【Server】(2)   【Unity3D游戏开发】(48) 

    最近,在为我的游戏服务器进行性能优化,而我在性能优化的过程中,首先是减少程序中锁的使用,一眼过去,发现消息队列是线程之前争锁之常地。虽然我们使用的是并发包里,性能高的并发队列(服务器是用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
    转载请注明原文地址: https://ju.6miu.com/read-3750.html

    最新回复(0)