목차
- Thread Safe
- 쓰레드와 메모리구조
- 쓰레드
- 프로세스 동기화
- 프로세스 스케줄링 알고리즘
- 프로세스 상태와 스케줄러
- Inter Process Communication(프로세스간의 통신)
- 프로세스 메모리 영역
- Process (프로세스)
Thread Safe 란?
Thread 는 프로세스와 다르게 프로세스 내부에서 할당 받은 자원을 공유 한다. 멀티 쓰레드 환경에서 한번에 공유 자원에 접근하는 Race Condition 이 발생해도 올바른 실행 결과가 나오게 보장함을 의미한다.
Thread Safe 를 지키는 방법
- Re-entrancy
- 어떤 함수가 한 스레드에 의해 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하더라도 그 결과가 각각에게 올바로 주어져야 한다.
- Thread Local Storage
- 공유 자원의 사용을 최대한 줄여 각각의 스레드에서만 접근 가능한 저장소들을 사용함으로써 동시 접근을 막는다.
- 이 방식은 동기화 방법과 관련되어 있고, 또한 공유상태를 피할 수 없을 때 사용하는 방식이다.
- Mutual Exclusion
- Thread에 Lock, Semaphore, Mutex 를 걸어서 공유자원에는 하나의 thread만 접근 가능하게 한다.
- Atomic operations
- 데이터 변경시 atomic하게 데이터에 접근하도록 만듭니다.
- Immutable Object
- 자바의
Final
처럼 객체를 생성한 후 수정이 불가능 하게 한다.
- 자바의
Thread 동기화
- 실행 순서 에 따른 동기화
- 메모리 접근 에 대한 동기화
실행 순서에 따른 동기화
쓰레드의 실행 순서를 정하고 정해진 순서에 따라 작업을 처리하도록 한다.
메모리 접근에 대한 동기화
공용 메모리에 하나의 Thread 만 접근이 가능하도록 해 Thread safe 를 실현한다.
동기화 기법
유저 모드 동기화 (User Mode Synchronize)
- 동기화가 진행되는 과정에서 커널 의 힘을 빌리지 않는 동기화 기법이다.
- 따라서 동기화를 위해서 커널 모드 로의 전환이 불필요해 성능상의 이점이 있다.
- 그러나 그만큼 기능상의 제한도 있다.
- 크리티컬 섹션 기반의 동기화, 인터락 함수 기반의 동기화
커널 모드 동기화 (Kernel Mode Synchronize)
- 커널에서 제공하는 동기화 기능을 활용하는 방법이다.
- 따라서 동기화에 관련된 함수가 호출될 때마다 커널 모드로의 변경이 필요하고, 성능 저하로 이어지게 된다.
- 하지만 그만큼 유저 모드 동기화에서 제공하지 못하는 기능을 제공받을 수 있다.
- 뮤텍스 기반의 동기화, 세마포어 기반의 동기화, 이름있는 뮤텍스 기반의 프로세스 동기화, 이벤트 기반의 동기화