싱글코어에서도 Thread를 늘리면 빨라질까?
싱글코어 CPU 한 개라서, 실질적으로 한번에 한 개만 실행할 수 있다고 가정
- 여기서 덧셈을 하는 300개의 쓰레드를 생성해 돌린다고 가정해보자.
- 커널 레벨 쓰레드라면, 나의 Task(프로세스, 쓰레드 등 스케줄링해야 하는 작업 단위)가 많아진다.
- 다른 프로세스도 돌아가고 있을 것이므로, 쓰레드를 늘린 프로세스(나)의 CPU 점유율이 높아져서 내 속도가 빨라진다.
- 즉, 다른 프로세스도 돌아가고 있고, 커널 레벨 쓰레드라면, 나의 CPU점유율이 높아져서 속도가 빨라진다.
- 물론, 쓰레드 너무 많이 만든다면 오버헤드가 더 커져서 느려지게 된다.
-
요약:
-
멀티 프로세스 환경에서 다른 프로세스가 돌아가고 있을 때, 커널 레벨 쓰레드를 늘린다면 프로세스 속도는 빨라진다.
(CPU 점유율이 높아지기 때문에)
-
프로세스가 딱 하나만 돌아가고 있거나, 유저 레벨 쓰레드를 늘린다면 오버헤드 때문에 프로세스 속도는 느려진다.
(유저 레벨 쓰레드는 프로세스 내에서 쓰레드 스케줄링할 뿐, 운영체제는 프로세스 하나로 보기 때문에 점유율이 높아지지 않는다.)
-