java8中parallelStream性能测试及结果分析
程序员文章站
2023-12-16 08:33:04
测试1
@benchmarkmode(mode.averagetime)
@outputtimeunit(timeunit.nanoseconds)
@war...
测试1
@benchmarkmode(mode.averagetime) @outputtimeunit(timeunit.nanoseconds) @warmup(iterations = 5, time = 3, timeunit = timeunit.seconds) @measurement(iterations = 20, time = 3, timeunit = timeunit.seconds) @fork(1) @state(scope.benchmark) public class streambenchtest { list<string> data = new arraylist<>(); @setup public void init() { // prepare for(int i=0;i<100;i++){ data.add(uuid.randomuuid().tostring()); } } @teardown public void destory() { // destory } @benchmark public void benchstream(){ data.stream().foreach(e -> { e.getbytes(); try { thread.sleep(10); } catch (interruptedexception e1) { e1.printstacktrace(); } }); } @benchmark public void benchparallelstream(){ data.parallelstream().foreach(e -> { e.getbytes(); try { thread.sleep(10); } catch (interruptedexception e1) { e1.printstacktrace(); } }); } public static void main(string[] args) throws runnerexception { options opt = new optionsbuilder() .include(".*" +streambenchtest.class.getsimplename()+ ".*") .forks(1) .build(); new runner(opt).run(); } }
parallelstream线程数
默认是runtime.getruntime().availableprocessors() - 1,这里为7
运行结果
# run complete. total time: 00:02:44 benchmark mode cnt score error units streambenchtest.benchparallelstream avgt 20 155868805.437 ± 1509175.840 ns/op streambenchtest.benchstream avgt 20 1147570372.950 ± 6138494.414 ns/op
测试2
将数据data改为30,同时sleep改为100
benchmark mode cnt score error units streambenchtest.benchparallelstream avgt 20 414230854.631 ± 725294.455 ns/op streambenchtest.benchstream avgt 20 3107250608.500 ± 4805037.628 ns/op
可以发现sleep越长,parallelstream优势越明显。
小结
parallelstream在阻塞场景下优势更明显,其线程池个数默认为
runtime.getruntime().availableprocessors() - 1,如果需修改则需设置-djava.util.concurrent.forkjoinpool.common.parallelism=8
以上就是本次讲述知识点的全部内容,感谢你对的支持。