Re: [問題] 關於 boost asio 的 thread 問題
我的確是 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
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.132.169.16
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1454514253.A.693.html
→
02/04 00:44, , 1F
02/04 00:44, 1F
→
02/04 00:44, , 2F
02/04 00:44, 2F
→
02/04 00:49, , 3F
02/04 00:49, 3F
跟CPU的核心數相同? 那不就是4核心 就開4個 thread?
那網路上找到很多說 可以開幾萬個 thread 是什麼意思???
還是說那幾萬個 thread 其實都一直在 switch ????
推
02/04 01:03, , 4F
02/04 01:03, 4F
→
02/04 01:03, , 5F
02/04 01:03, 5F
→
02/04 01:03, , 6F
02/04 01:03, 6F
→
02/04 01:03, , 7F
02/04 01:03, 7F
→
02/04 01:03, , 8F
02/04 01:03, 8F
→
02/04 01:03, , 9F
02/04 01:03, 9F
→
02/04 01:03, , 10F
02/04 01:03, 10F
→
02/04 01:04, , 11F
02/04 01:04, 11F
感謝.... 我會用無比的毅力 把英文看完!!!
→
02/04 01:06, , 12F
02/04 01:06, 12F
→
02/04 01:06, , 13F
02/04 01:06, 13F
我也有感覺還是先簡單一點好了 謝謝喔 XD
只是因為以前學生時代有寫過 winsock
想說都過了 5年了 該寫個比以前厲害的東西 XD
→
02/04 10:28, , 14F
02/04 10:28, 14F
→
02/04 10:28, , 15F
02/04 10:28, 15F
→
02/04 10:36, , 16F
02/04 10:36, 16F
→
02/04 10:36, , 17F
02/04 10:36, 17F
→
02/04 10:37, , 18F
02/04 10:37, 18F
→
02/04 10:37, , 19F
02/04 10:37, 19F
http://en.cppreference.com/w/cpp/thread/thread/hardware_concurrency
std::thread::hardware_concurrency()
可以用這function 來參考吧
之前用這個試的時候 回傳4
讓我很疑惑 我的電腦只能開 4個 thread ???
為什麼網路上大家都說可以開幾萬個???
現在終於懂了
※ 編輯: yhn0tgb60 (220.132.169.16), 02/04/2016 10:58:09
→
02/04 11:07, , 20F
02/04 11:07, 20F
推
02/05 13:34, , 21F
02/05 13:34, 21F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):