멀티 쓰레딩 (Multithreading)
Multithreading은 운영 체제에서 프로그램이 여러 작업을 동시에 수행할 수 있게 해주는 기능이다. 즉, 하나의 프로세스 내에서 여러 스레드가 동시에 실행되는 것을 의미하며, 각 스레드는 프로세스의 자원을 공유하면서도 독립적인 실행 경로를 가진다.
이는 단일 프로세스 내에서 여러 실행 흐름(스레드)을 생성하고 관리하며, 현대 컴퓨터 시스템의 성능과 효율성을 크게 향상시킨다.
각 스레드는 자신만의 프로그램 카운터, 레지스터 집합, 스택을 가지고 있다. 하지만 같은 프로세스 내의 스레드들은 코드, 데이터 섹션, 파일과 같은 자원을 공유한다. 이는 프로세스보다 스레드의 생성과 컨텍스트 스위칭이 더 가벼운 이유가 된다.
Multithreading의 장점
- 성능 향상: 여러 작업을 병렬로 실행함으로써 전체적인 프로그램 속도가 향상된다.
- 응답성 개선: 사용자 인터페이스 스레드와 처리 스레드를 분리하여 애플리케이션의 반응성을 높일 수 있다.
- 자원 활용 최적화: CPU와 메모리 등의 시스템 자원을 더 효율적으로 사용할 수 있다.
- 모듈화 설계: 복잡한 작업을 독립적인 스레드로 나누어 코드 구조를 단순화할 수 있다.
- 비동기 작업 처리: I/O 작업과 같은 대기 시간을 효율적으로 활용할 수 있다.
Multithreading의 단점
- 복잡성 증가: 디버깅과 테스트가 더 어려워지며, 동기화 문제 등 새로운 유형의 버그가 발생할 수 있다.
- 동기화 오버헤드: 공유 자원에 대한 접근을 관리하기 위한 동기화 메커니즘이 필요하며, 이는 성능 저하를 초래할 수 있다.
- 경쟁 조건(Race Condition): 여러 스레드가 동시에 공유 데이터에 접근할 때 예측할 수 없는 결과가 발생할 수 있다.
- 자원 소비 증가: 각 스레드는 시스템 자원을 소비하므로, 과도한 스레드 생성은 시스템 성능을 저하시킬 수 있다. [27].