程序员社区

Java多线程如何确定线程数

一、Java并发编程实战

在这里插入图片描述

仔细观察上面两个公式,其实是类似的,在CPU使用率达到100%时,其实结论是一致的,这时候计算线程的公式就变成了:

N

t

h

r

e

a

d

s

=

N

c

p

u

100

%

(

1

+

w

/

c

)

N_{threads}=N_{cpu}*100\%*(1+w/c)

Nthreads=Ncpu100%(1+w/c)

根据上面的公式,我们在实践应用中计算的公式就出来了,如下:

  1. 针对IO密集型的:阻塞耗时w一般都是计算耗时的几倍,假设阻塞耗时=计算耗时的情况下,

    N

    t

    h

    r

    e

    a

    d

    s

    =

    N

    c

    p

    u

    (

    1

    +

    1

    )

    =

    2

    N

    c

    p

    u

    N_{threads}=N_{cpu}*(1+1)=2N_{cpu}

    Nthreads=Ncpu(1+1)=2Ncpu

  2. 对于计算密集型的,阻塞耗时趋于0,即w/c趋于0,公式

    N

    t

    h

    r

    e

    a

    d

    s

    =

    N

    c

    p

    u

    N_{threads}=N_{cpu}

    Nthreads=Ncpu

注意上面只是做出的较为普适的线程数公式推算,实际应用中需要考虑多个方面,比如内容容量消耗,任务耗时等,可以对这个公式进行不断的场景调整适配。

参考:
参考文章

赞(0) 打赏
未经允许不得转载:IDEA激活码 » Java多线程如何确定线程数

一个分享Java & Python知识的社区