[OS] 멀티 프로세스와 멀티 스레드

hyeminn·2021년 1월 21일
0
post-custom-banner

✨ 멀티 프로세스와 멀티 스레드


멀티 프로세스

멀티 프로세싱이란 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것이다.

멀티 프로세싱을 할 경우 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 다른 프로세스에게 영향이 확산되지 않는다는 장점이 있다.
그러나 현재 작업의 상태를 저장하고 다음 진행할 작업의 상태값을 읽어 적용하는 Context-Switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등의 오버헤드가 발생하게 된다. 프로세스는 각각의 독립된 메모리 영역을 할당받았기 때문에 프로세스 간 공유하는 메모리가 없어, Context-Switching이 발생하면 캐시에 있는 모든 데이터를 리셋하고 다시 캐시 정보를 불러와야 하기 때문이다.


멀티 스레드

멀티 스레딩이란 하나의 프로세스가 여러 작업을 여러 개의 스레드를 사용하여 동시에 처리하도록 하는 것이다.

멀티 스레딩을 할 경우 스레드간 Stack영역을 제외한 메모리를 공유하고 있기 때문에 스레드 간 작업량이 작아Context-Switching이 빠르며 자원을 효율적으로 관리할 수 있다. 또한 통신의 부담이 적어 응답시간이 빠르다.

하지만 스레드 하나가 프로세스 내 자원을 망친다면 전체 프로세스에게 영향을 받게 된다. 또한 스레드 간에 전역변수로 자원을 공유하기 때문에 필연적으로 동기화 문제가 발생할 수 밖에 없다. 스레드의 스케줄링은 운영체제가 자동으로 해주지 않기 때문에 프로그래머의 주의 깊은 설계가 필요하며 디버깅 또한 까다로워진다.


https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4

profile
성장하는 개발자가 되고 싶어요 😁
post-custom-banner

0개의 댓글