作者:
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 本身就是多執行緒在跑了,
等於每個資料 都是一個執行緒在處理???
那其實就也沒有分批的必要了????
作者:
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 擋住 @@