作者noapaov (單身漢)
看板java
標題[問題] Thread 數量 的評估
時間Mon Jun 29 00:31:23 2015
最近在實作一個遊戲app, 看了一些文章, 有的建議提供執行緒的數量,
有的則建議適量即可, multi - Thread的主要目的是提高CPU的使用率,
但實在有點不太清楚一個伺服器端的程式到底要建立多少個執行緒 ? 假設我有5個功能
EX : 登入 、 聊天 、 發信 、 金流 、 遊戲戰爭運算~
啟動越多 Threads , 相對的管理成本與記憶體的負擔也就比較大, 如果以我上述的例子 ~
我需要啟動5個以上的Thread來處理嗎?
一般都以什麼方法來判定要開啟幾個thread的?
謝謝 ~
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.34.181.227
※ 文章網址: https://webptt.com/m.aspx?n=bbs/java/M.1435509085.A.D7A.html
1F:→ fireslayer: 五個還好吧,然後越多thread就要越小心同步的問題 06/29 01:48
2F:推 cowbaying: 不單是看數量 你要看之間有沒有共用的資料 06/29 02:36
3F:→ cowbaying: 注意thread-safe 06/29 02:37
4F:推 AmosYang: 我的舊文 #1Bj6ZTjD 有稍微提到這個 06/29 04:02
5F:推 Killercat: thread用功能來分來做profiling的話,非常危險 06/29 05:33
6F:→ Killercat: 五個thread的peak,heap等等完全不一樣 06/29 05:34
7F:→ Killercat: 只能說這是一種很粗略地分法,但是不能當作profiling 06/29 05:34
8F:→ Killercat: 的準則,這SA的太少資源切割(防peak)的也太粗略 06/29 05:35
9F:→ Killercat: 正確的分法是profiling找出gap 把gap thread化 06/29 05:36
10F:→ Killercat: 並且避免過多的gap集中在一起造成peak 06/29 05:36
11F:→ Killercat: 不過講真的啦,通常就開個thread pool, pool大小就 06/29 05:37
12F:→ Killercat: cpu*2,這大概是經驗上來講比較可行的試法了 06/29 05:38
13F:→ noapaov: 我看一般聊天室的功能, 一個Client就會開啟一個Thread 06/29 14:05
14F:→ noapaov: 也就是如果有1000個玩家就會產生1000個Thread 06/29 14:07
15F:→ noapaov: 斷線的時後可能在關閉Thread或把Thread丟回Pool之類的 06/29 14:08
16F:→ noapaov: 不支到大家對這樣的作法有時麼意見呢? 06/29 14:08
17F:推 AmosYang: 如果不需考量 scalability 的話, 能動不會crash就好 :D 06/29 17:21
18F:推 kojilin: 基本上大家連上線也沒頻繁在動作的,就不用那麼多thread 06/30 10:34
19F:→ noapaov: 是沒錯 ~ 雖然沒使用, 但是thread 還是會佔用著一些資源 06/30 11:20
20F:→ popcorny: 沒什麼大問題。在往上會有點困難,但是初期好寫比較重要 06/30 13:16