看板 java 關於我們 聯絡資訊
最近在實作一個遊戲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
fireslayer: 五個還好吧,然後越多thread就要越小心同步的問題 06/29 01:48
cowbaying: 不單是看數量 你要看之間有沒有共用的資料 06/29 02:36
cowbaying: 注意thread-safe 06/29 02:37
AmosYang: 我的舊文 #1Bj6ZTjD 有稍微提到這個 06/29 04:02
Killercat: thread用功能來分來做profiling的話,非常危險 06/29 05:33
Killercat: 五個thread的peak,heap等等完全不一樣 06/29 05:34
Killercat: 只能說這是一種很粗略地分法,但是不能當作profiling 06/29 05:34
Killercat: 的準則,這SA的太少資源切割(防peak)的也太粗略 06/29 05:35
Killercat: 正確的分法是profiling找出gap 把gap thread化 06/29 05:36
Killercat: 並且避免過多的gap集中在一起造成peak 06/29 05:36
Killercat: 不過講真的啦,通常就開個thread pool, pool大小就 06/29 05:37
Killercat: cpu*2,這大概是經驗上來講比較可行的試法了 06/29 05:38
noapaov: 我看一般聊天室的功能, 一個Client就會開啟一個Thread 06/29 14:05
noapaov: 也就是如果有1000個玩家就會產生1000個Thread 06/29 14:07
noapaov: 斷線的時後可能在關閉Thread或把Thread丟回Pool之類的 06/29 14:08
noapaov: 不支到大家對這樣的作法有時麼意見呢? 06/29 14:08
AmosYang: 如果不需考量 scalability 的話, 能動不會crash就好 :D 06/29 17:21
kojilin: 基本上大家連上線也沒頻繁在動作的,就不用那麼多thread 06/30 10:34
noapaov: 是沒錯 ~ 雖然沒使用, 但是thread 還是會佔用著一些資源 06/30 11:20
popcorny: 沒什麼大問題。在往上會有點困難,但是初期好寫比較重要 06/30 13:16