借助shared_ptr实现copy-on-write以提高多线程并发性能

        锁竞争是服务器性能四大杀手之一(其他三个是:数据拷贝、环境切换、动态资源申请),本文将基于之前发布的kimgbo网络I/O库,以一个多线程群发聊天服务器的实现为例,介绍如何借助shared_ptr提高多线程并发的性能。

        多线程群发聊天服务器实现的功能是,客户端连接服务器后,可以向服务器发送消息(消息=消息头+消息体),服务器负责将消息转发给其他正处于连接状态的客户端(包括发送消息的客户端)。示意图如下:

                   

       传统的基于Reactor模式的服务器,使用工作线程池来处理连接请求,并通过在操作之前加锁的方式来保护连接队列的数据安全。多线程对于请求队列的取出和插入操作实际上是串行的,整个服务器的并发性能较差。如果能让插入和取出处理转发任务的两个操作实现并行,则能够大大提升服务器的性能。

        shared_ptr是采用引用计数方式的智能指针,如果当前只有一个观察者,则其引用计数为1,可以通过shared_ptr::unique()判断,通过s

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值