1. 스레드, 프로세스, 코어에 대한 개념
스레드 (Thread)
- 정의:
- 프로세스 내에서 실행되는 작업 단위.
- 프로세스가 할당받은 자원을 공유하며, 병렬 처리를 가능하게 함.
- 특징:
- 한 프로세스에 여러 스레드가 존재 가능(멀티스레딩).
- 같은 메모리 공간(힙, 코드)을 공유하지만, 각 스레드는 개별적인 스택을 가짐.
- 데이터 공유는 쉽지만, 동기화 문제가 발생할 수 있음(예: Deadlock).
프로세스 (Process)
- 정의:
- 실행 중인 프로그램의 단위.
- 운영체제(OS)가 자원을 할당하고 관리하는 독립적인 실행 단위.
- 특징:
- 고유의 메모리 공간(코드, 데이터, 힙, 스택)을 가짐.
- 다른 프로세스와 독립적으로 동작.
- 프로세스 간 데이터 공유는 어렵고 IPC(Inter-Process Communication)를 사용해야 함.
코어 (Core)
- 정의:
- CPU의 작업 처리 단위.
- 코어 하나는 한 번에 하나의 스레드를 실행 가능(하이퍼스레딩 지원 시 두 개 이상 가능).
- 특징:
- 멀티코어 CPU는 여러 코어를 사용하여 다수의 스레드를 병렬로 처리.
- 코어 수가 많을수록 동시 실행 가능한 작업 수가 증가.
2. 스레드, 프로세스, 코어 수는 많을수록 좋은가?
1) 스레드 수가 많을수록 좋은가?
-
장점:
- CPU가 유휴 상태로 있는 시간을 줄이고, 작업을 더 효율적으로 처리 가능.
- I/O 작업 대기 시간 동안 다른 스레드가 CPU를 사용할 수 있음.
-
단점:
- 너무 많은 스레드는 컨텍스트 스위칭 비용 증가로 성능 저하 발생.
- 동기화 문제가 발생할 가능성이 높아짐.
- 적정 수준의 스레드 수 유지가 중요(코어 수 대비 적절히 설정).
2) 프로세스 수가 많을수록 좋은가?
-
장점:
- 각 프로세스는 독립적인 메모리 공간을 가지므로 하나의 프로세스 오류가 다른 프로세스에 영향을 주지 않음.
- 분산 처리를 통해 효율성 증대 가능.
-
단점:
- 프로세스 간 데이터 공유가 어려움(IPC 필요).
- 메모리와 CPU 자원 소모가 큼.
- 시스템 성능을 초과하는 프로세스 실행 시 컨텍스트 스위칭과 메모리 부족 문제 발생.
3) 코어 수가 많을수록 좋은가?
-
장점:
- 작업을 병렬 처리할 수 있는 능력이 증가.
- 멀티스레드/멀티프로세스 프로그램에서 성능 개선.
-
단점:
- 단일 스레드로 설계된 프로그램은 추가 코어를 활용하지 못함.
- 코어 수가 늘어나도 메모리 대역폭이 부족하거나 I/O 병목이 있으면 성능 향상이 제한됨.
- 물리적 코어 수 대비 효율적인 소프트웨어 설계가 중요.
결론
- 스레드 수는 많을수록 좋은 것이 아니라, 코어 수와 작업의 특성에 맞춰 적정 수준으로 조정해야 함.
- 프로세스 수는 리소스 한도 내에서 병렬 처리 이점을 얻을 수 있으나, 시스템 성능을 초과하면 성능이 하락할 수 있음.
- 코어 수는 병렬 처리 성능을 결정하지만, 하드웨어 성능과 소프트웨어 최적화의 조화를 고려해야 함.
따라서, 최적의 성능은 스레드, 프로세스, 코어 수 간의 균형과 작업 특성에 따라 달라집니다.
추가 학습 자료