- 論壇徽章:
- 9
|
本帖最后由 wlmqgzm 于 2015-10-15 00:35 編輯
實現(xiàn)了無鎖(mutex)的高并發(fā)服務(wù)器架構(gòu), 很高興.
Boost asio 很強大, 不到一萬行代碼就做了一個代碼中完全無鎖(mutex)或者類似的東西 的服務(wù)器架構(gòu).
可以說,基本上, 自己還沒有見過如此無鎖的基礎(chǔ)網(wǎng)絡(luò)架構(gòu).
完全無鎖的東西, 自己也是第一次做, 用了一周時間, 終于想出了辦法, 最終實現(xiàn)了, 這樣一個統(tǒng)一的無鎖服務(wù)器架構(gòu).
核心技術(shù)包括: 啟動 (CPU線程數(shù)量)的用戶線程, 作為public work.
啟動一個CPU線程數(shù)量)的用戶線程, 作為private work. 需要加鎖的信息處理全部放到單CPU的private work 任務(wù)隊列上執(zhí)行.
總共啟動(CPU+1)線程做任務(wù)隊列的處理.
網(wǎng)絡(luò)處理部分, 代碼所有的收發(fā)和數(shù)據(jù)分析, 異步代碼, 都由 public work執(zhí)行, 多線程大處理能力. 所有的連接等全部在用戶纖程(fiber)上處理, 中間沒有任何線程的切換, 沒有任何的阻塞.
"定時器"等 處理, socket檢查time out的代碼, 等 由private work執(zhí)行, 單線程處理. 逐個處理, 因為超時(time out)分辨率只需要做到一秒級別, 處理非常輕松. 這部分涉及btree的檢索,刪除,增加等, 但是, 由于全部跑在一個線程上, 就沒有沖突的可能性, 沒有任何鎖(如mutex)或者其他的同步的東西. 并且大的處理內(nèi)容是基本上每秒才處理一次, 基本不消耗CPU.
所有pulic 對共享數(shù)據(jù)的讀寫, 均轉(zhuǎn)化為 向private post的調(diào)用, 全部是通過任務(wù)調(diào)度器傳遞 post過去, 自己寫的程序中不用加鎖(mutex)
所有private向pulic 的調(diào)用, 例如: disconnect超時連接, 全部是asio::socket底層自動通知, 不需要消息傳遞.
最終做到的結(jié)果, 就是: 無mutex, 真正無鎖的高并發(fā)服務(wù)器架構(gòu), 太佩服自己了, 呵呵. |
|