- 论坛徽章:
- 9
|
本帖最后由 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, 真正无锁的高并发服务器架构, 太佩服自己了, 呵呵. |
|