Java多核cpu多线程运行效率分析

一直以为java线程开得越多效率越高,后来知道了执行的效率和cpu核心数有关,今天试了下多核cpu下多线程的计算:

本机i5四核,分别开启1、4、10、20、40、100、400个线程做100W次,md5运算,结果如下:

全部任务执行完毕,总耗时:38368ms,threadSize:1,section:1000000
全部任务执行完毕,总耗时:17293ms,threadSize:4,section:250000
全部任务执行完毕,总耗时:15107ms,threadSize:10,section:100000
全部任务执行完毕,总耗时:15019ms,threadSize:20,section:50000
全部任务执行完毕,总耗时:16115ms,threadSize:40,section:25000
全部任务执行完毕,总耗时:22014ms,threadSize:100,section:10000
全部任务执行完毕,总耗时:40431ms,threadSize:400,section:2500

threadSize是并发的线程数,section是每个线程进行的md5运算数。

线程数在10-20之间效率最高


cpu使用情况:

单个线程:

Java多核cpu多线程运行效率分析_第1张图片

4个线程:

Java多核cpu多线程运行效率分析_第2张图片

10个线程:

Java多核cpu多线程运行效率分析_第3张图片

20个线程:

Java多核cpu多线程运行效率分析_第4张图片

40线程:

Java多核cpu多线程运行效率分析_第5张图片

100线程:

Java多核cpu多线程运行效率分析_第6张图片

400线程:

Java多核cpu多线程运行效率分析_第7张图片

如图所示:

1.单线程程序也会导致多个cpu的使用率上升,猜想是因为单个线程挤占了系统其它进程的cpu资源,导致这些系统进程在其它的cpu上开销增加。

2.在10-20个线程时,cpu的上升平滑稳定,而到了上百个线程时,cpu的使用率波动比较大,可能是频繁的任务调度造成的。


你可能感兴趣的:(Java多核cpu多线程运行效率分析)