测试 1
@benchmarkmode (mode.averagetime) @outputtimeUnit (timeUnit.nanoSeconds) @Warmup (iterations = 5, time = 3, timeUnit = timeUnit.seconds) @measurement (iterations = 20, time = 3, timeUnit = timeUnit.seconds) @fork (scope) @State (scope.Benchmark)@ List <string> data = new ArrayList <> (); @setup public void init () {// 준비 (int i = 0; i <100; i ++) {data.add (uuid.randomuuid (). toString ()); }} @teardown public void voidordory () {// goodory} @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)은 runnerexception {옵션 opt = new OptionsBuilder () .include ( ".*" + streamBenchTest.class.getSimplename () + ") .forks (1) .Build (); 새 러너 (opt) .run (); }} ParallelStream 线程数
默认是 runtime.getRuntime (). availProcessors () -1, 这里为 7
运行结果
# 완료. 총 시간 : 00 : 02 : 44Benchmark 모드 CNT 스코어 오류 오류 유닛 스스트림 벤치 테스트 .BenchParelLtream AVGT 20 155868805.437 ± 1509175.840 NS/OpstreambenchTest.BenchStream AVGT 20 1147570372.950 ± 6138494.414 NS/OP/OP.
测试 2
将数据 데이터 30, 同时 수면 改为 100
벤치 마크 모드 CNT 스코어 오류 오류 유닛 스스트림 벤치 테스트 .BenchparallelStream AVGT 20 414230854.631 ± 725294.455 NS/OPSTREAMBENCHTEST.BENCHSTREAM AVGT 20 3107250608.500 ± 4805037.628 NS/OP
可以发现 수면 , ,, 평행선 优势越明显。 优势越明显。
小结
ParallelStream 在阻塞场景下优势更明显, 其线程池个数默认为
runtime.getRuntime (). avideprocessors () -1, 如果需修改则需设置 -djava.util.concurrent.forkjoinpool.common.parallelism = 8
以上就是本次讲述知识点的全部内容, 感谢你对武林网的支持。