프로세스, 스레드 차이
- 프로세스
- 운영체제로부터 자원을 할당받는 작업의 단위
- 프로세스 간의 통신은 IPC(Inter-Process Communication)을 사용
- 프로세스는 각각 독립된 메모리 영역을 할당받는다.
- 프로세스 간의 전환 속도가 느리다.
- 스레드
- 프로세스 내에서 실행되는 여러 흐름의 단위
- 스레드는 프로세스 내의 메모리를 공유
- 스레드 간의 전환 속도가 빠르다.
- 스레드는 프로세스 내의 메모리를 공유하기 때문에 데이터를 주고 받는 것이 간단하다.
멀티 프로세스, 멀티 쓰레드 차이
- 멀티 프로세스
- 여러 개의 프로세스가 동시에 실행되는 것
- 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스만 죽어 다른 영향이 확산되지 않음
- 멀티 쓰레드
- 하나의 프로세스에 여러 개의 스레드가 동시에 실행되는 것
- 스레드는 프로세스 내의 메모리를 공유
- 스레드 간의 전환 속도가 빠르다.
- 스레드는 프로세스 내의 메모리를 공유하기 때문에 데이터를 주고 받는 것이 간단하다.
프로세스 간의 통신보다 스레드 간의 통신 비용이 적어 멀티 쓰레드를 사용하는게 낫다.
뮤텍스, 세마포어 차이
- 뮤텍스
- 상호배제를 위한 동기화 기법
- 뮤텍스를 획득한 스레드만이 임계영역에 접근 가능
- 뮤텍스를 획득한 스레드가 뮤텍스를 해제하기 전까지 다른 스레드는 대기
- 세마포어
- 동기화 기법 중 하나로, 상호배제와 동기화를 위해 사용
- 세마포어는 뮤텍스와 달리 여러 스레드가 동시에 임계영역에 접근 가능
- 세마포어는 뮤텍스와 달리 카운트를 가지고 있어, 카운트가 0이면 대기하고, 1이상이면 통과
주로 뮤텍스는 동기화 대상이 하나일때, 세마포어는 동기화 대상이 여러개일때 사용한다.
데드락이란?
- 두 개 이상의 프로세스나 스레드가 서로 상대방의 작업이 끝나기만을 기다리고 있어 무한 대기 상태에 빠지는 현상
- 데드락을 해결하기 위해선 4가지 조건을 하나라도 제거하면 된다.
- 상호배제(Mutual Exclusion)
- 점유대기(Hold and Wait)
- 비선점(No Preemption)
- 순환대기(Circular Wait)
동기와 비동기 차이
- 동기
- 요청과 그 결과가 동시에 일어남
- 요청한 작업이 끝날 때까지 대기
즉, 처리과정이 직렬로 이루어짐
- 비동기
- 요청과 그 결과가 동시에 일어나지 않음
- 요청한 작업이 끝나지 않아도 다른 작업을 수행할 수 있음
- 콜백함수를 통해 결과를 받을수 있음
즉, 처리과정이 병렬로 이루어짐
블로킹과 논블로킹 차이
- 블로킹
- 작업이 완료될 때까지 제어권을 가지고 있음
- 작업이 완료되기 전까지 다른 작업을 수행할 수 없음
- 논블로킹
- 작업이 완료되지 않아도 제어권을 가지고 있지 않음
- 작업이 완료되지 않아도 다른 작업을 수행할 수 있음