Thread와 Fork, 동기식과 비동기식 소켓, Mutex와 Semaphore
카테고리 없음2017. 10. 3. 11:30
동기식 소켓
- read혹은 send를 할 때, Blocking상태로 다른 작업을 수행하지 않고 대기하는 것.
- 구현, 구조가 용이
비동기식 소켓
- read혹은 send를 할 때, Non-Blocking상태로 다른 작업을 수행하며 완료되었는지 체크하는 것.
- 구현, 구조가 까다로움
Thread는 Fork
- thread는 fork의 비효율성을 극복하기 위해 사용.
- fork할 때 Process가 가지는 모든 자료구조를 다시 생성해야하므로 소모비용이 큼
- thread는 현재 Process의 대부분의 내용을 공유하기 때문에 정보 공유가 용이. 하지만 이로 인한 동기화 문제 발생.(임계영역으로 처리)
- 공통점 : thread와 fork 모두 각각의 PC를 가지고 스케쥴링의 단위(Context switch)가 됨
- 차이점 : thread는 code와 data를 공유. fork는 공유하지 않음
Mutex와 Semaphore
- 쉽게 보자면 Mutex는 값이 1인 Semaphore로 볼 수도 있다.(Semaphore는 0과 그 외의 숫자를 가지지만 Mutex는 0과 1만 가짐)
- Mutex는 해당 Mutex의 소유자만 해제 가능. Semaphore는 소유자가 아니더라도 해제 가능
- Semaphore는 공유된 자원을 여러 프로세스가 접근하는 것을 막고 Mutex는 공유된 자원을 여러 스레드가 접근하는 것을 막음.
- 설명) Mutex는 Process가 종료되면 함께 사라지지만, Semaphore는 시스템 범위에 걸쳐 파일 시스템의 형태로 존재하며 Process가 종료되어도 사라지지 않음.
- Mutex는 동기화 대상이 하나일 때, Semaphore는 동기화 대상이 여럿일 때 사용(Semaphore는 값을 증가하며 참조하는 프로세스 개수를 표현 or 참조할 때는 1, 쓰기를 할때는 2로 구현하여 상태를 표현하기도 함)
동기식과 비동기식 소켓이 기억나서 정리하다가 Thread와 임계영역이 생각나서 조사 및 정리
출처1 : http://xenostudy.tistory.com/230 (Thread와 Fork)
출처2 : http://ninako21.tistory.com/500 (뮤텍스와 세마포어)