운영체제 멀티스레드 (Multi Thread) - mapc-team/document GitHub Wiki

멀티 스레드(Multi Thread)

  • 멀티 스레드: 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 의미
  • 멀티 프로세스: 여러개의 CPU를 사용하여 여러 프로세스를 동시에 수행하는 것을 의미
  • 멀티 스레드, 멀티 프로세스 모두 여러 흐름을 동시에 수행한다는 공통점을 가지고 있음
  • 멀티 프로세스는 각 프로세스가 독립적인 메모리를 가지고 별도로 수행, But 멀티 스레드는 각 스레드가 자신이 속한 프로세스의 메모리를 공유한다는 점이 차이점

멀티 스레딩의 장점

  • 프로세스로 동시에 처리하던 일을 스레드로 구현하면 메모리 공간과 시스템 자원 소모가 줄어듬
    • 스레드 간 통신은 전역변수 공간 또는 heap 영역을 이용하여 데이터를 주고 받을 수 있음
    • 스레드 context switch는 프로세스 context switch와 달리 캐시메모리를 비울 필요가 없어 더 빠름

참고자료

멀티 스레딩의 문제점

  • 서로 다른 스레드가 데이터와 heap영역을 공유하기 때문에 사용중인 변수나 자료구조에 접근 할 때 주의해야 한다.
  • 멀티스레딩 환경에서는 동기화 작업을 통해 작업 처리 순서를 컨트롤 및 공유 자원에 대한 접근을 컨트롤을 함.
  • 동기화 작업으로 인해 병목현상이 발생하여 성능이 저하될 가능성이 높으므로 과도한 Lock을 피해야한다.
  • 멀티 프로세스의 경우 프로세스간 공유자원이 없어 동시 접근하는 경우가 없음

멀티 스레드 VS 멀티 프로세스

  • 멀티 스레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 문맥 전환이 빠르다는 장점이 있지만, 오류로 인해 하나의 스레드가 종료되면 전체 스레드가 종료될 수 있다는 점과 동기화 문제가 있음.
  • 멀티 프로세스 방식은 하나의 프로세스가 죽더라도 다른 프로세스에는 영향을 끼치지 않고 정상적으로 수행된다는 장점이 있지만, 멀티 스레드보다 많은 메모리 공간과 CPU 시간을 차지한다는 단점이 존재.
구분 장점 단점
멀티 스레드 적은 메모리 공간, 빠른 context 전환 충돌이 일어날 수 있음, 동기화 문제, 디버깅이 어려움
멀티 프로세스 다른 프로세스에 영향을 끼치지 않음 많은 메모리 공간과 CPU 시간을 차지함