lunchScreen/Interview_Questions

멀티 프로세스와 멀티 스레드의 차이점

Opened this issue · 2 comments

멀티 프로세스와 멀티 스레드의 차이점
  • Multi thread는 Multi process보다 작은 Memory space을 차지하고 Context Switching이 빠른 장점이 있지만, 동기화 문제와 하나의 thread 장애로 전체 스레드가 종료될 위험을 갖고 있습니다.

  • Thread는 Process의 자원을 공유하여 사용하기 때문에 data를 그대로 가져다가 쓰면 되지만, Process가 변경되면 cache의 정보, 가상 Memory, TLB등의 정보가 모두 지워지기 때문에 data 접근하는데 오래걸립니다.

  • Thread가 CPU 작업의 최소단위(흐름의 단위)인 이유

    • 운영체제는 안전성을 위해서 Process마다 자신에게 할당된 Memory 내의 정보에만 접근할 수 있도록 제약을 두고 있고, 이를 벗어나는 정보에 접근하려면 오류가 발생한다.
    • Program이 더 복잡해질 수록 하나의 Process로 작업을 하기 어려워져 더 작은 실행 단위 개념이 필요하게 되어 Thread가 등장하게 된다. Thread는 Process의 코드에 정의된 절차에 따라 실행되는 특정한 수행 경로이다.
    • Thread는 Code/Data/Heap Memory 영역의 내용을 공유하기 때문에 어떤 Thread 하나에서 오류가 발생한다면 같은 Process 내의 다른 Thread 모두가 강제로 종료된다.

멀티 프로세스는 다수의 프로세서(=CPU)가 협력적으로 하나의 작업을 동시에 처리하는 것을 의미합니다. 멀티 스레드는 하나의 프로세스를 여러 스레드로 작업을 나누어 수행하는 것을 의미합니다.

멀티 프로세스는 환경변수 및 프로세스 핸들 테이블을 상속할 뿐, 각각 독립적인 구조를 가졌습니다. 따라서 CPU의 레지스터 교체 뿐 아니라 RAM 및 CPU 사이의 캐시 메모리까지 초기화 되므로 고비용의 Context switching을 필요로 하며 fork() 작업을 통해 수행합니다. 또한 통신을 위해서는 IPC를 사용해야 합니다.

멀티 스레드는 Stack 영역을 제외한 Code, Data, Heap 영역을 공유합니다. 따라서 Context Switching 시에 공유 메모리가 있는 만큼의 시간이 절약됩니다. 또한 IPC를 사용하지 않고도 자료공유가 가능합니다.