V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yxaaa123
V2EX  ›  Java

“处理的慢?那再加 500 个线程!”

  •  
  •   yxaaa123 · 2016-08-11 10:28:16 +08:00 · 6883 次点击
    这是一个创建于 3029 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这样加线程。。。。真的合适吗?

    38 条回复    2016-08-12 09:21:07 +08:00
    wizardforcel
        1
    wizardforcel  
       2016-08-11 10:29:51 +08:00
    没那么多核也没用啊。
    jimzhong
        2
    jimzhong  
       2016-08-11 10:29:56 +08:00
    对于运算密集型的场合一般是不合适的
    UnisandK
        3
    UnisandK  
       2016-08-11 10:30:42 +08:00
    这是给太湖之光在写程序吗
    feilaoda
        4
    feilaoda  
       2016-08-11 10:31:16 +08:00
    不合适
    除非你机器 nb 的不行
    wander2008
        5
    wander2008  
       2016-08-11 10:32:07 +08:00 via iPhone
    这么说的,对多线程理解比较初级
    sarike
        6
    sarike  
       2016-08-11 10:34:00 +08:00
    同时在加 500 个核,是好使的。
    tabris17
        7
    tabris17  
       2016-08-11 10:34:20 +08:00   ❤️ 2
    建议总线程数=CPU 内核数*2+1
    mko0okmko0
        8
    mko0okmko0  
       2016-08-11 10:35:51 +08:00   ❤️ 3
    最佳公式不是相同任务的线程=((cpu 核心数量 x2)+1)吗?
    线程太多切换线程本身就有虚耗.
    qzy168
        9
    qzy168  
       2016-08-11 10:44:25 +08:00
    啥服务器有那么多线程呀?云计算吗?
    zhuangzhuang1988
        10
    zhuangzhuang1988  
       2016-08-11 10:48:23 +08:00
    先 visutalstudio 性能分析一下..
    domty
        11
    domty  
       2016-08-11 10:49:09 +08:00
    没用吧,核心不够多线程间切换的开销反而更浪费资源
    just4test
        12
    just4test  
       2016-08-11 10:58:32 +08:00
    @tabris17 为什么是这个数量?
    tabris17
        13
    tabris17  
       2016-08-11 11:00:38 +08:00
    @just4test 经验公式
    harry890829
        14
    harry890829  
       2016-08-11 11:01:41 +08:00
    为什么不是用多进程……
    zmj1316
        15
    zmj1316  
       2016-08-11 11:10:16 +08:00
    遇到过大量加线程性能提升的现象,最后发现其实是线程负载不均衡,先结束的线程在等待,所以疯狂加效果显著,虽然切换损失也很大。最后把负载均衡就正常了,建议跑个 profiler 看看
    em70
        16
    em70  
       2016-08-11 11:12:58 +08:00   ❤️ 1
    饭不够吃?再给你拿双筷子吧
    hush
        17
    hush  
       2016-08-11 11:15:18 +08:00
    1 个女人怀胎 10 月生一个小孩, 10 个女人怀 1 个月就能生了么
    ArthurKing
        18
    ArthurKing  
       2016-08-11 11:20:30 +08:00
    线程不是越多越好,也不是绝对的跟 cpu 核数相关。在考虑开多少个线程时,最重要的一个因素就是资源争用度。
    justfly
        19
    justfly  
       2016-08-11 11:29:21 +08:00
    不是 IO 密集的,加线程起副作用; IO 密集的,线程数量也不是越多越好,有一个最佳值,要看具体业务。

    PS : Java 的 web 生态里面貌似并没有意愿使用 单线程或少量线程 + IO 多路复用 的策略来提高资源利用率,很奇怪。
    ZE3kr
        20
    ZE3kr  
       2016-08-11 11:45:28 +08:00 via iPhone
    @just4test 应该是线程数=核数就够了,不过一些芯片已经能超线程了能跑的线程就是核数*2 ,当线程到这个数量速度才最快。
    21grams
        21
    21grams  
       2016-08-11 11:56:06 +08:00 via Android
    要看具体场景,不见得就没用
    zwh8800
        22
    zwh8800  
       2016-08-11 12:04:04 +08:00
    对于 io 密集的任务,这样是可行的。运算密集的就得跟核数相关了。
    cocalrush
        23
    cocalrush  
       2016-08-11 12:19:09 +08:00 via Android
    @zwh8800 正解
    SlipStupig
        24
    SlipStupig  
       2016-08-11 12:21:05 +08:00
    首先要看算什么任务,如果是运算密集型不会有丝毫的作用, IO 密集型是有帮助的,线程本质是强占 CPU 时间,但是 CPU 本身要切换线程的话,需要更多消耗内核资源,这个时候线程切换时间会特别长,内核维护线程的列表会更大,在机器不够强的时候可能连正常运行都成问题
    DRcoding
        25
    DRcoding  
       2016-08-11 12:36:16 +08:00   ❤️ 1
    @hush 但是你要是想生 10 个猴子,一个女人得生 10 次,但是你也可以让 10 个女人同时怀上生一次,:)
    coldear
        26
    coldear  
       2016-08-11 12:37:16 +08:00
    先 profile ,找瓶颈
    yxaaa123
        27
    yxaaa123  
    OP
       2016-08-11 13:07:56 +08:00
    现在程序启动后有 700 多个线程, Redis Client 有 600 。。。。不知道说啥好, php 程序员写 java 就会这样,遇到好几个了
    jhaohai
        28
    jhaohai  
       2016-08-11 13:14:50 +08:00 via iPhone
    如果是阻塞式的加线程可能有用
    seeker
        29
    seeker  
       2016-08-11 13:18:50 +08:00
    楼上都跑偏了,楼主其实是吐槽外行老板 or 甲方。
    jasontse
        30
    jasontse  
       2016-08-11 13:21:57 +08:00 via iPad
    看 CPU 利用率和线程阻塞时长
    yxaaa123
        31
    yxaaa123  
    OP
       2016-08-11 13:26:36 +08:00
    @seeker 是的。。
    iyangyuan
        32
    iyangyuan  
       2016-08-11 19:05:48 +08:00 via iPhone
    也不一定没用,最起码抢占 CPU 的竞争力加强了
    petelin
        33
    petelin  
       2016-08-11 20:26:10 +08:00 via Android
    @SlipStupig 系统启动的时候就已经有那么多线程了,对于阻塞很强的多开十几个没事吧?
    williamx
        34
    williamx  
       2016-08-11 21:09:21 +08:00
    是不是合适得看实际的情况。
    SlipStupig
        35
    SlipStupig  
       2016-08-11 22:18:12 +08:00
    @petelin 只要你线程切换不频繁就没事
    jimages
        36
    jimages  
       2016-08-11 23:50:52 +08:00 via Android
    读写的慢?分成 500 个文件。
    8023
        37
    8023  
       2016-08-12 09:18:10 +08:00
    “处理的慢?那再加 500 台电脑!”
    yzl0208994
        38
    yzl0208994  
       2016-08-12 09:21:07 +08:00
    如果 IO 密集型似乎可以,如果是 CPU 密集型就变慢了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4045 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 86ms · UTC 00:59 · PVG 08:59 · LAX 16:59 · JFK 19:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.