[問題] Thread 數量 的評估

看板java作者 (單身漢)時間10年前 (2015/06/28 16:31), 編輯推噓5(5015)
留言20則, 7人參與, 最新討論串1/1
最近在實作一個遊戲app, 看了一些文章, 有的建議提供執行緒的數量, 有的則建議適量即可, multi - Thread的主要目的是提高CPU的使用率, 但實在有點不太清楚一個伺服器端的程式到底要建立多少個執行緒 ? 假設我有5個功能 EX : 登入 、 聊天 、 發信 、 金流 、 遊戲戰爭運算~ 啟動越多 Threads , 相對的管理成本與記憶體的負擔也就比較大, 如果以我上述的例子 ~ 我需要啟動5個以上的Thread來處理嗎? 一般都以什麼方法來判定要開啟幾個thread的? 謝謝 ~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.34.181.227 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1435509085.A.D7A.html

06/29 01:48, , 1F
五個還好吧,然後越多thread就要越小心同步的問題
06/29 01:48, 1F

06/29 02:36, , 2F
不單是看數量 你要看之間有沒有共用的資料
06/29 02:36, 2F

06/29 02:37, , 3F
注意thread-safe
06/29 02:37, 3F

06/29 04:02, , 4F
我的舊文 #1Bj6ZTjD 有稍微提到這個
06/29 04:02, 4F

06/29 05:33, , 5F
thread用功能來分來做profiling的話,非常危險
06/29 05:33, 5F

06/29 05:34, , 6F
五個thread的peak,heap等等完全不一樣
06/29 05:34, 6F

06/29 05:34, , 7F
只能說這是一種很粗略地分法,但是不能當作profiling
06/29 05:34, 7F

06/29 05:35, , 8F
的準則,這SA的太少資源切割(防peak)的也太粗略
06/29 05:35, 8F

06/29 05:36, , 9F
正確的分法是profiling找出gap 把gap thread化
06/29 05:36, 9F

06/29 05:36, , 10F
並且避免過多的gap集中在一起造成peak
06/29 05:36, 10F

06/29 05:37, , 11F
不過講真的啦,通常就開個thread pool, pool大小就
06/29 05:37, 11F

06/29 05:38, , 12F
cpu*2,這大概是經驗上來講比較可行的試法了
06/29 05:38, 12F

06/29 14:05, , 13F
我看一般聊天室的功能, 一個Client就會開啟一個Thread
06/29 14:05, 13F

06/29 14:07, , 14F
也就是如果有1000個玩家就會產生1000個Thread
06/29 14:07, 14F

06/29 14:08, , 15F
斷線的時後可能在關閉Thread或把Thread丟回Pool之類的
06/29 14:08, 15F

06/29 14:08, , 16F
不支到大家對這樣的作法有時麼意見呢?
06/29 14:08, 16F

06/29 17:21, , 17F
如果不需考量 scalability 的話, 能動不會crash就好 :D
06/29 17:21, 17F

06/30 10:34, , 18F
基本上大家連上線也沒頻繁在動作的,就不用那麼多thread
06/30 10:34, 18F

06/30 11:20, , 19F
是沒錯 ~ 雖然沒使用, 但是thread 還是會佔用著一些資源
06/30 11:20, 19F

06/30 13:16, , 20F
沒什麼大問題。在往上會有點困難,但是初期好寫比較重要
06/30 13:16, 20F
文章代碼(AID): #1La25Trw (java)
文章代碼(AID): #1La25Trw (java)