[問題] 關於 boost asio 的 thread 問題

看板C_and_CPP作者 (呦厚厚)時間8年前 (2016/02/02 20:21), 8年前編輯推噓3(3011)
留言14則, 2人參與, 最新討論串1/2 (看更多)
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) boost asio 1.60 我現在在用 boost asio 寫 socket, 有執行緒的問題, 本來我打算分幾個執行緒去作業, 收封包, 寄封包, 接連線, 然後每個使用者獨立一個執行緒, 不過我後來發現 asio 本身就是 多執行緒的架構??? 只要使用 io_service->post(), 和 async_XXXXX() 系列的function, 就會自動跑多執行緒??? 所以其實我在 socket 的部分, 應該完全沒有分執行緒的必要???? 另外 本來我 send 不是即時的, 我會先都堆起來, 每個tick send一個固定的數量, 避免一次太多包要寄 會塞車, (這意思不是單一封包太大, 是可以能非常多使用者, 同時在操作, 要寄很多不同的封包, 給不同的使用者) 不過如果 async_write 本身就是多執行緒在跑了, 等於每個資料 都是一個執行緒在處理??? 那其實就也沒有分批的必要了???? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.132.169.16 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1454415719.A.14E.html ※ 編輯: yhn0tgb60 (220.132.169.16), 02/02/2016 20:24:19

02/02 22:04, , 1F
我沒用過boost的asio,但async這個字與thread是不相干的
02/02 22:04, 1F

02/02 22:08, , 2F
當然,他也有可能命名方式像<future>的async一樣
02/02 22:08, 2F

02/03 02:38, , 3F
假設原 po 使用的 transport 是 TCP... 首先, 在 app 層做
02/03 02:38, 3F

02/03 02:38, , 4F
batch 幾乎可以肯定是個壞主意, 特別是對 network 與 netwo
02/03 02:38, 4F

02/03 02:39, , 5F
rk programming 不熟的新手來說. 關鍵字 "tcp nagle nopush
02/03 02:39, 5F

02/03 02:39, , 6F
", 建議 google 一下
02/03 02:39, 6F

02/03 02:46, , 7F
再來, async I/O framework (asio included) 的 (worker) t
02/03 02:46, 7F

02/03 02:46, , 8F
hread 是拿來做 computation 的 (特例先不談), 而不是像傳
02/03 02:46, 8F

02/03 02:46, , 9F
統的 multi process/thread 模型把 thread 拿來做 I/O mult
02/03 02:46, 9F

02/03 02:46, , 10F
iplexing (以避免 I/O 卡住其他 computation 的進行)
02/03 02:46, 10F

02/03 02:58, , 11F
懶得打字了. 最後, 如果你的設計是一個使用者 (容我把它簡
02/03 02:58, 11F

02/03 02:58, , 12F
化成一個 tcp connection) 配一個 thread, 其實沒什麼理由
02/03 02:58, 12F

02/03 02:58, , 13F
需要 async framework. 因為特定使用者的 I/O 不會把其他使
02/03 02:58, 13F

02/03 02:58, , 14F
用者的 computation 擋住 @@
02/03 02:58, 14F
文章代碼(AID): #1Mi9zd5E (C_and_CPP)
文章代碼(AID): #1Mi9zd5E (C_and_CPP)