[TIL] 프로세스와 스레드
프로세스
- 운영체제로부터 할당 받은 자원을 사용하는 작업의 단위
- 실행되는 프로그램 자체와 그 주변환경을 뜻함.
- 사용중인 파일, 데이터, 메모리 주소공간 등
- 프로세스는 서로 독립적이다.
- 한 프로세스가 다른 프로세스의 자원에 접근하려면 파이프 통신, 소켓 통신 등을 사용해야 한다.
스레드
- 프로세스가 할당 받은 자원을 사용하는 실행의 단위
- 스레드는 프로세스 내에서 stack만 할당 받고, code, data, heap은 공유한다.
멀티 프로세스
- 하나의 응용 프로그램을 여러개의 프로세스가 작업
- 장점
- 서로 독립적이어서 하나의 프로세스에 문제가 생기더라도 다른 프로세스에 오류가 확장되지 않는다.
- 단점
- Context Switching에서의 오버헤드
- 프로세스간 통신 기법이 복잡하다.
멀티 스레드
- 하나의 프로세스를 여러 개의 스레드가 작업
- 웹 서버, 윈도우, 리눅스 등
- 장점
- 자원의 효율적인 사용
- 처리 비용 감소
- 간단한 통신 문제
- 단점
- 설계의 복잡성
- 디버깅이 까다로움
- 단일 프로세스의 경우 효과 미미
- 동기화 문제
- 오류 발생 시 다른 스레드에도 영향
- 다른 프로세스에서 스레드를 제어할 수 없다.
멀티 스레드를 사용하는 이유?
- 멀티 프로세스를 사용하게 되면, 프로세스를 생성하며 생기는 시스템 콜이 추가된다.
- 멀티 스레드를 사용하면 이 시스템 콜을 하지 않아 자원을 절약할 수 있다.
- 프로세스간의 통신보다 스레드간의 통신이 더 비용이 적기 때문에 부담이 줄어들게 된다.
- 하지만 프로세스 내부의 자원을 전역 변수로 여러 스레드가 접근하기 때문에 동기화 문제를 신경 써야 한다.