我的確是 Network 和 Thread 的新手, 所以問題會很多 XD
http://0rz.tw/XxYHm
Threads and Boost.Asio
Internal Threads
The implementation of this library for a particular platform
may make use of one or more internal threads to emulate asynchronicity.
內部 Threads
這個 library 在特定的平台, 會使用一個以上的內部 threads 去模擬 asynchronicity,
我因為這句話, 所以以為 boost 的非同步是用 multi threads 做到的,
不過 其實我英文很差.....
所以我沒有把整篇文章都看懂, 也許是我搞錯了....
只有 post 是用到 multi threads???
另外 nagle和 nopush(cork) 的意思, 就是 會等到封包大一點再送的意思???
而 nagle 和 delay ack 一起時, 如果 write-write-read 時,
會遇到因為對方 ack 送不出去, 我收不到 ack, 所以後面的封包也不能送的問題,
造成最多大約 40ms(0.04s) 的 delay,
nopush 和 nagle 的差別 , 在於封包的大小,
nopush 是 MTU, 一般系統預設是 1500Byte,
nagle 是 MMS, 一般系統預設是 536Byte,
不過他們也都有時間的限制,
200ms(0.2s)後 就算沒有達到封包的大小, 還是會送出去,
希望以上我的理解沒錯 XD
所以 不建議做 batch 的原因, 是同時送封包,
會因為 ack 的問題, 送不出去嗎???
讓他自由的寄收, 比較能避免 ack 塞住的問題????
其實我也有想過 如果我每個使用者都一個 Thread,
那就不用 asynchronicity, 用 synchronicity 就好了????
只是感覺 asynchronicity 好像就比較厲害 看大家都用這個 XD
而且我擔心 Thread 會出什麼問題(我也不知道會出什麼問題),
如果我又用 synchronicity, 會不會系統就突然卡死住,
關於 multi thread, 我用 C++11, 我打算一開始就先開 1000的 thread 預備,
根據不同系統, thread 數的上限不同, 但好像至少都有好幾萬?????
不知道用爆了會發生什麼事.....
開了之後, 所有的需要的東西的 tick 都會向 thread pool 註冊,
包括 socket 和 每個使用者 和其他需要的東西,
每個 thread 在初期都是鎖住的,
會有個 main thread 負責分配工作, 每分配一個工作, 就對一個 thread 解鎖,
每個 thread 事情做完後, 就會再鎖住,
main thread 發現所有工作都分配完, 且 thread 又都鎖住時,
就會進入下一個tick, 再開始分配工作,
其實我不知道這樣行不行, 我正在寫當中, 先試試再說 XD