- Thread 간의 데이터 공유와 Process 간의 데이터 공유의 공통점과 차이점을 설명해주세요.
→ 공부 전에 내 답변
스레드는 프로세스를 구성하는 단위입니다. 그렇기 때문에 하나의 프로세스의 작업은 여러 개의 스레드로 구성될 수 있습니다. 따라서 프로세스 내부에서 스레드끼리 데이터를 공유하는 것입니다.
반면에 프로세스는 프로세스 간에 데이터가 공유가 되려면 멀티 프로세스 환경이라는 가정이 있어야 합니다. 멀티 프로세스 환경에서 프로세스 간에 데이터 이동은 IPC라고 하는데 IPC 방법 중에는 파이프 등의 방법이 있습니다. 따라서 공통점은 프로세스의 자원을 공유한다이고, 차이점은 스레드는 단일 프로세스 환경에서도 데이터를 공유할 수 있지만 프로세스는 다중 프로세스 환경에서만 데이터를 공유할 수 있다는 점입니다.
동일 프로세스 내부의 스레드들은 공유 메모리 영역이 존재해 지역변수, 전역변수를 통해 데이터 공유가 가능합니다. 즉, 다른 스레드와 공간과 자원을 공유하면서 사용함으로써 프로세스보다 빠르고 적은 메모리를 차지합니다.
프로세스는 완전히 독립된 실행 객체여서 다른 프로세스의 영향을 받지 않는다는 장접이 있습니다. 하지만 독립 되어 있는 만큼 별도의 설비 없이는 프로세스간에 통신이 어렵습니다. 이를 위해 커널 영역에서 IPC라는 내부 프로세스간 통신을 제공하고, 프로세스는 커널이 제공하는 IPC 설비를 이용해 프로세스간 통신을 합니다.
-
메시지 전달
커널이 제공하는 API를 이용해서 커널 공간을 통해 통신.
메시지 큐를 사용하여 송신 프로세스는 큐에 enqueue, 수신 프로세스는 큐에 dequeue 하며 상호간 통신. 메시지 큐는 커널 단에서 관리함.
- 파이프
- 소켓
-
메모리 공유
프로세스끼리 특정 공통의 메모리 영역을 공유하며 상호간 통신하는 방법
데이터 자체를 공유하도록 지원, 한 프로세스에서 변경한 메모리 공간의 내용을 다른 프로세스에서 접근할 수 있음. 공유 메모리는 커널에서 관리됨.
- 멀티 스레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 문맥 전환이 빠르다는 장점이 있습니다.
- 하지만 오류로 인해 하나의 스레드가 종료되면 전체 스레드가 종료될 수 있다는 점과 동기화 문제를 안고 있다.
- 반면 멀티 프로세스 방식은 하나의 프로세스가 죽더라도 다른 프로세스에는 영향을 끼치지 않고 정상적으로 수행된다는 장점이 있습니다.
- 멀티 스레드보다 많은 메모리 공간과 CPU 시간을 차지한다는 단점이 존재한다.
Q) 스택을 스레드마다 독립적으로 할당해야하는 이유는?
스택은 함수 호출시 전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간이므로 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고 이는 독립적인 실행 흐름이 추가되는 것이다. 따라서 스레드 정의에 따라 독립적인 실행 흐름을 추가하기 위한 최소 조건으로 독립된 스택을 할당한다.
출처
- 멀티 스레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 문맥 전환이 빠르다는 장점이 있습니다.