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

作者: yhn0tgb60 (呦厚厚)   2016-02-02 20:21:56
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
boost asio 1.60
我現在在用 boost asio 寫 socket, 有執行緒的問題,
本來我打算分幾個執行緒去作業,
收封包, 寄封包, 接連線, 然後每個使用者獨立一個執行緒,
不過我後來發現 asio 本身就是 多執行緒的架構???
只要使用 io_service->post(), 和 async_XXXXX() 系列的function,
就會自動跑多執行緒???
所以其實我在 socket 的部分, 應該完全沒有分執行緒的必要????
另外 本來我 send 不是即時的,
我會先都堆起來, 每個tick send一個固定的數量,
避免一次太多包要寄 會塞車,
(這意思不是單一封包太大, 是可以能非常多使用者, 同時在操作,
要寄很多不同的封包, 給不同的使用者)
不過如果 async_write 本身就是多執行緒在跑了,
等於每個資料 都是一個執行緒在處理???
那其實就也沒有分批的必要了????
作者: Caesar08 (Caesar)   2016-02-02 22:04:00
我沒用過boost的asio,但async這個字與thread是不相干的當然,他也有可能命名方式像<future>的async一樣
作者: fr3ak (fr3@K)   2016-02-03 02:38:00
假設原 po 使用的 transport 是 TCP... 首先, 在 app 層做batch 幾乎可以肯定是個壞主意, 特別是對 network 與 network programming 不熟的新手來說. 關鍵字 "tcp nagle nopush", 建議 google 一下再來, async I/O framework (asio included) 的 (worker) thread 是拿來做 computation 的 (特例先不談), 而不是像傳統的 multi process/thread 模型把 thread 拿來做 I/O multiplexing (以避免 I/O 卡住其他 computation 的進行)懶得打字了. 最後, 如果你的設計是一個使用者 (容我把它簡化成一個 tcp connection) 配一個 thread, 其實沒什麼理由需要 async framework. 因為特定使用者的 I/O 不會把其他使用者的 computation 擋住 @@

Links booklink

Contact Us: admin [ a t ] ucptt.com