멀티태스킹은 반드시 효율적인 것이 아니다.
사람과 컴퓨터라고 해서 크게 다른 것이 아니다. 결국 A, B 두 작업이 있다고 했을 때
사람이든, 컴퓨터든 컨텍스트 스위칭이 필요하다. 즉, 현재 작업하는 문맥을 의미하고 그 문맥이 변하는 것을 얘기한다.
이 과정에서 컴퓨터같은 경우에도 어딘가에 저장해두었다가 다시 불러오는 그러한 작업들이 필요하며 약간의 비용이 발생한다.
하지만, 사람의 경우 컨텍스트 스위칭 비용이 매우 크기때문에 그 전환을 줄이는 것이 중요하다.
CPU 코어와 스레드의 수는 어떻게 하는게 좋을까?
1. 코어 > 스레드 : CPU 를 100% 쓰지는 못하겠지만, 컨텍스트 스위칭이 줄어든다.
2. 코어 << 스레드 : CPU 를 100% 쓰겠지만, 추가 스위칭 비용이 늘어난다.
3. 코어 == 스레드 + 1 : 적절하다.
추가적으로 고려해야 할 점 : 작업 종류
1. CPU 바운드 작업 : (CPU 코어 수) or (CPU 코어 수 + 1)
2. I/O 바운드 작업 : CPU 개수보다 많이 잡아야 한다. 왜냐하면, 네트워크 대기하면서 놀고 있는 경우가 많아서
실무에서는
일반적인 실무 중, 웹 애플리케이션 서버같은 경우에는 CPU 보다는 I/O 바운드 작업이 많다.
따라서, 실무에서는 성능 테스트를 통해서 최적의 스레드 숫자를 찾는 것이 이상적이다.
'CS' 카테고리의 다른 글
자바 - 스레드 실행 (0) | 2024.12.10 |
---|---|
자바 - 스레드와 스케줄링 (0) | 2024.12.10 |
자바 - 프로세스와 스레드 (0) | 2024.12.10 |