프로세스와 스레드의 차이를 어렴풋이 알고 있었는데, 좀 더 자세히 정리하고 싶어서 글을 쓴다.
"프로세스와 스레드의 차이에 대해 설명해 주세요"
- 프로세스는 운영체제로 부터 자원을 할당 받는 작업의 단위이고, 스레드는 할당 받은 자원을 활용하는 실행의 단위 입니다. (참조글 인용)
그럼 위에서 말하는 할당 받는 자원은 무엇인가요?
- CPU 시간, 운영되기 위해 필요한 주소 공간, 독립 메모리 영역(Code, Data, Stack, Heap)
멀티 프로세싱과 멀티 스레딩의 차이는 무엇인가요?
- 멀티 프로세싱을 하게 되면 프로세스에 할당 해야 하는 자원의 양도 많아지고 자원 할당을 위한 시스템콜 이 많아져 , 하나의 프로세스에서 멀티 스레딩으로 구현하게 된다면 자원 할당도 효율적으로 처리 할 수 있으며, 하나의 자원을 여러 스레드가 활용해야 한다면 스레드간의 통신 비용이 프로세스간의 통신 비용보다 낮기 때문에 효율적입니다. 하지만, 그만큼 프로그래머의 주의를 요구합니다.
무슨 주의가 필요하고, 멀티 스레딩의 단점은 무엇인가요?
- 일단, 동기화 문제 때문에 디버깅이 까다롭습니다. 또한 하나의 스레드의 문제가 생기면 전체에 영향을 줍니다. 추가로, 하나의 자원을 공유할 때 병목 현상이 발생할 수 있습니다.
병목현상을 막기 위해선 어떻게 해야 할까요?
- 과도한 Lock의 사용을 자제하고, 적절한 범위의 Lock을 걸 수 있도록 해야 합니다.
스레드가 프로세스로 부터 할당 받는 자원은 무엇인가요?
- 같은 프로세스안의 여러 스레드들은 프로세스의 자원(code, data, stack, heap)중에 개별 Stack을 할당 받습니다. 나머지 영역은 다른 스레드와 공유합니다.
[참조]