[問題] 多執行緒伺服器設計問題
版上各位先進好:
小弟我目前在設計多執行緒的伺服器上遇到效能瓶頸,
底層的Socket Server是用Boost::Asio,
單純用single io_service & multiple thread的架構處理效能還不錯,
但目前系統上都會需要封包指令是要將某個index要對應到某個session,
所以只好在accept時把index跟session存入到map中,這時就需要使用lock去做保護,
因為加了這個lock導致在一秒內如果是上萬的連線數要aceept延遲就會提高,
後面開始run的過程中因為我使用的是shared_mutex,
所以對map純讀(shared_lock)感覺效能還可以。
如果是單純讀寫分離的Queue還可以用boost::lockfree去處理,
但遇到真的架構上就需要有一個map,這種情況就不知道怎麼優化它,
想問版上的各位先進有什麼設計方向可供我參考,謝謝。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.117.102.47
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1552575225.A.E28.html
→
03/14 23:04,
7年前
, 1F
03/14 23:04, 1F
老闆的需求 QQ
推
03/15 00:27,
7年前
, 2F
03/15 00:27, 2F
index是int64_t, 直接先配置好vector好像有點太大, 還有session連線斷線的問題勢必要lock
→
03/15 02:30,
7年前
, 3F
03/15 02:30, 3F
→
03/15 02:30,
7年前
, 4F
03/15 02:30, 4F
→
03/15 02:35,
7年前
, 5F
03/15 02:35, 5F
→
03/15 02:36,
7年前
, 6F
03/15 02:36, 6F
→
03/15 02:36,
7年前
, 7F
03/15 02:36, 7F
→
03/15 02:38,
7年前
, 8F
03/15 02:38, 8F
→
03/15 02:39,
7年前
, 9F
03/15 02:39, 9F
→
03/15 02:40,
7年前
, 10F
03/15 02:40, 10F
→
03/15 02:40,
7年前
, 11F
03/15 02:40, 11F
→
03/15 02:41,
7年前
, 12F
03/15 02:41, 12F
→
03/15 02:47,
7年前
, 13F
03/15 02:47, 13F
→
03/15 02:48,
7年前
, 14F
03/15 02:48, 14F
其實就是GameServer的入口, index就是玩家資料在DB的ID,
資料轉到其他Service去處理完後,再丟回給GameServer傳給對應的玩家,
所以它才需要一個ID跟Session的Map,
目前的確我是有設計類似加開分流的概念去處理這件事,
但不同的Server的遊戲邏輯是不互通的, 所以還是想增加單個伺服器的承載量.
※ 編輯: klsdf (122.117.102.47), 03/15/2019 07:10:46
→
03/15 12:13,
7年前
, 15F
03/15 12:13, 15F
→
03/15 12:14,
7年前
, 16F
03/15 12:14, 16F
→
03/15 12:14,
7年前
, 17F
03/15 12:14, 17F
→
03/15 14:32,
7年前
, 18F
03/15 14:32, 18F
→
03/15 14:35,
7年前
, 19F
03/15 14:35, 19F
推
03/16 07:29,
7年前
, 20F
03/16 07:29, 20F
→
03/16 07:29,
7年前
, 21F
03/16 07:29, 21F
→
03/16 07:29,
7年前
, 22F
03/16 07:29, 22F
主要是索引值是玩家的編號 即使知道目前的帳號數量pre-allocate
但對新註冊的帳號沒有用, 不過使用vector跟隨機存取的想法我可能可以多想一下
※ 編輯: klsdf (122.117.102.47), 03/17/2019 00:08:03
推
03/17 01:02,
7年前
, 23F
03/17 01:02, 23F
推
03/17 19:58,
7年前
, 24F
03/17 19:58, 24F
→
03/17 20:09,
7年前
, 25F
03/17 20:09, 25F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章