jdk线程池
1、核心线程数设置:
CUP密集型任务:线程执行任务时一直会利用CUP,应该尽可能避免线程上下文切换。
比如Java非IO等待操作。
公式:CPU核心数+1(+1是因为存在某些因素导致当前线程需等待,为最大化利用CUP所以+1)
或:Runtime.getRuntime().availableProcessors()+1获取
IO密集型任务:线程执行任务时大部分时间在IO等待数据,CUP空闲时间多,应该尽可能利用CUP。
比如网络请求IO、Mysql查询数据IO,文件IO等。
公式:2*CPU核心数
或:线程数=CPU核心数*(1+线程等待时间/线程运行总时间) (其中线程等待时间指线程没有使用CPU的时间,比如阻塞在了IO;线程运行总时间指线程执行完某个任务的总时间)
获取线程等待时间、线程运行总时间的方法:利用jvisualvm抽样来估计这两个时间。

如上图,其中:IO所占时间(线程等待时间)=总时间-总时间(CPU)
混合任务

浙公网安备 33010602011771号