多线程高并发内存池队列模型

多线程高并发无锁内存池队列模型

                                                      

  鲁峰 写于:201703024

 转载请注明出处,写一篇原著不容易。有问题欢迎交流。

  做大并发服务时,无锁队列显得格外重要。本文介绍一种常见的多线程无锁队列模型。

  

有图见真相


 模式介绍:

  1 采集来的数据存队列的过程

  本模型的网络通讯层是基于类似与完成端口模型,收数据线程,是2*cpu+2个,多个线程把接收到的信息存放到一个队列中(m_oBlockItemQueue)中,


  2 单线程切分片,供下一步,单线程取属于自己线程负责的块用

 然后由workthread单线程只负责切片,其他活都不干, 将m_oBlockItemQueue数据按用户的id切分成n个内存块m_oThreadContext[n]


 3  启动n个线程,每个线程只负责自己线程负责的内存块的读取和回收

为了让数据处理线程拿到数据,需要启动n个,从m_oThreadContext中取数据的线程,取出数据后交给执行函数进行处理,执行函数处理的时候也可以参考类似的队列结构减少锁等待。注意的地方是,虽然整体上也是多线程读内存池,但是每个线程只负责一个属于自己管理的内存,所以对于每一片的内存,读和写的都是一个单线程,这样就可以避免加锁带来的效率问题。



 结论

  目前高并发互联网架构用的都是类似的模型,这种架构配合其他的无锁内存管理结构可以极大程序的减少由于锁导致的cpu等待。

 



  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值