운영체제 멀티스레드 (Multi Thread) - mapc-team/document GitHub Wiki
멀티 스레드(Multi Thread)
- 멀티 스레드: 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 의미
- 멀티 프로세스: 여러개의 CPU를 사용하여 여러 프로세스를 동시에 수행하는 것을 의미
- 멀티 스레드, 멀티 프로세스 모두 여러 흐름을 동시에 수행한다는 공통점을 가지고 있음
- 멀티 프로세스는 각 프로세스가 독립적인 메모리를 가지고 별도로 수행, But 멀티 스레드는 각 스레드가 자신이 속한 프로세스의 메모리를 공유한다는 점이 차이점
멀티 스레딩의 장점
- 프로세스로 동시에 처리하던 일을 스레드로 구현하면 메모리 공간과 시스템 자원 소모가 줄어듬
- 스레드 간 통신은 전역변수 공간 또는 heap 영역을 이용하여 데이터를 주고 받을 수 있음
- 스레드 context switch는 프로세스 context switch와 달리 캐시메모리를 비울 필요가 없어 더 빠름
멀티 스레딩의 문제점
- 서로 다른 스레드가 데이터와 heap영역을 공유하기 때문에 사용중인 변수나 자료구조에 접근 할 때 주의해야 한다.
- 멀티스레딩 환경에서는 동기화 작업을 통해 작업 처리 순서를 컨트롤 및 공유 자원에 대한 접근을 컨트롤을 함.
- 동기화 작업으로 인해 병목현상이 발생하여 성능이 저하될 가능성이 높으므로 과도한 Lock을 피해야한다.
- 멀티 프로세스의 경우 프로세스간 공유자원이 없어 동시 접근하는 경우가 없음
멀티 스레드 VS 멀티 프로세스
- 멀티 스레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 문맥 전환이 빠르다는 장점이 있지만, 오류로 인해 하나의 스레드가 종료되면 전체 스레드가 종료될 수 있다는 점과 동기화 문제가 있음.
- 멀티 프로세스 방식은 하나의 프로세스가 죽더라도 다른 프로세스에는 영향을 끼치지 않고 정상적으로 수행된다는 장점이 있지만, 멀티 스레드보다 많은 메모리 공간과 CPU 시간을 차지한다는 단점이 존재.
구분 | 장점 | 단점 |
---|---|---|
멀티 스레드 | 적은 메모리 공간, 빠른 context 전환 | 충돌이 일어날 수 있음, 동기화 문제, 디버깅이 어려움 |
멀티 프로세스 | 다른 프로세스에 영향을 끼치지 않음 | 많은 메모리 공간과 CPU 시간을 차지함 |