java stream parallel 을 이용한 Thread 병렬 처리와 몇개의 core 갯수만큼 병렬 처리 하는지 확인

CPU 가 논리 코어가 16개인 AMD ryzen 7 을 사용하는데 다음의 코드를 이용하면 thread 갯수별로 각 test 가 작동하는데 걸리는 시간을 측정해 볼 수 있다.

package test.test;

import java.util.stream.IntStream;

import org.junit.Test;

public class PararrelTest {
	@Test
	public void test64SleepThread() {
		IntStream.range(1, 64).parallel().forEach(nbr -> {
			try { Thread.sleep(1000); } catch (InterruptedException e) { }
		});
	}

	@Test
	public void test32SleepThread() {
		IntStream.range(1, 32).parallel().forEach( nbr -> {
			try { Thread.sleep(1000); } catch (InterruptedException e) { }
		} );
	}

	@Test
	public void test16SleepThread() {
		IntStream.range(1, 16).parallel().forEach(nbr -> {
			try { Thread.sleep(1000); } catch (InterruptedException e) { }
		});
	}

	@Test
	public void test8SleepThread() {
		IntStream.range(1, 8).parallel().forEach(nbr -> {
			try { Thread.sleep(1000); } catch (InterruptedException e) { }
		});
	}
}

테스트 결과와 같이
16코어로 16 x 4인 64개의 Thread를 1초씩 재우면 총 4초가 걸리고 (16개가 동시에 1초씩 쉰다.)
32개의 Thread는 2초가
그리고 16개와 8개는 1초씩 쉬게 된다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다