作者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/cn.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