免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1681 | 回复: 0

[其他] 实现了无锁(mutex)的高并发服务器架构, 很高兴. [复制链接]

论坛徽章:
9
程序设计版块每日发帖之星
日期:2015-10-18 06:20:00程序设计版块每日发帖之星
日期:2015-11-01 06:20:00程序设计版块每日发帖之星
日期:2015-11-02 06:20:00每日论坛发贴之星
日期:2015-11-02 06:20:00程序设计版块每日发帖之星
日期:2015-11-03 06:20:00程序设计版块每日发帖之星
日期:2015-11-04 06:20:00程序设计版块每日发帖之星
日期:2015-11-06 06:20:00数据库技术版块每周发帖之星
日期:2015-12-02 15:02:47数据库技术版块每日发帖之星
日期:2015-12-08 06:20:00
发表于 2015-10-15 00:33 |显示全部楼层
本帖最后由 wlmqgzm 于 2015-10-15 00:35 编辑

实现了无锁(mutex)的高并发服务器架构, 很高兴.

Boost asio 很强大, 不到一万行代码就做了一个代码中完全无锁(mutex)或者类似的东西 的服务器架构.
可以说,基本上, 自己还没有见过如此无锁的基础网络架构.  
完全无锁的东西, 自己也是第一次做, 用了一周时间, 终于想出了办法, 最终实现了, 这样一个统一的无锁服务器架构.

核心技术包括: 启动 (CPU线程数量)的用户线程, 作为public work.   
启动一个CPU线程数量)的用户线程, 作为private work.   需要加锁的信息处理全部放到单CPU的private work 任务队列上执行.
总共启动(CPU+1)线程做任务队列的处理.  

网络处理部分, 代码所有的收发和数据分析, 异步代码, 都由 public work执行, 多线程大处理能力.  所有的连接等全部在用户纤程(fiber)上处理, 中间没有任何线程的切换, 没有任何的阻塞.
"定时器"等 处理, socket检查time out的代码, 等  由private work执行, 单线程处理. 逐个处理, 因为超时(time out)分辨率只需要做到一秒级别,  处理非常轻松.  这部分涉及btree的检索,删除,增加等, 但是, 由于全部跑在一个线程上, 就没有冲突的可能性, 没有任何锁(如mutex)或者其他的同步的东西. 并且大的处理内容是基本上每秒才处理一次, 基本不消耗CPU.
所有pulic 对共享数据的读写, 均转化为 向private post的调用, 全部是通过任务调度器传递 post过去,  自己写的程序中不用加锁(mutex)
所有private向pulic 的调用, 例如: disconnect超时连接, 全部是asio::socket底层自动通知, 不需要消息传递.  

最终做到的结果, 就是: 无mutex,  真正无锁的高并发服务器架构, 太佩服自己了, 呵呵.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP