- 프로세스 내에 존재하는 일련의 실행 코드
- 프로세스는 존재하기만 하는 껍데기로 실제 작업은 Thread가 담당.
- 프로세스 생성 시 하나의 주 Thread 생성, 대부분 주 Thread가 모든 작업 처리, 주 Thread가 종료되면 프로세스도 같이 종료.
- Thread가 여러개 생긴 경우 주 Thread와 나머지 Thread들은 CPU 시간을 우선 순위에 따라 적절하게 분배하여 동시에 실행. 운영체제는 Thread별로 골고루 CPU시간을 배분
- 실제 Thread는 일정한 백그라운드 작업을 처리하고 작업이 끝나면 종료.
- 작업Thread가 백그라운드 작업중일때 주Thread는 작업Thread를 만들기만 함.
- 주Thread와 작업Thread는 서로 독립적으로 실행되지만 주Thread는 작업Thread가 종료되었는지의 여부는 주기적으로 검사.
- 작업 Thread가 무한 루프로 돌고 있더라도 모든 Thread는 프로세스가 종료되면 강제로 종료됨.
멀티 태스킹 : 하나의 운영체제에 여러개의 프로세스가 동시에 실행되는 환경
멀티스레드 : 여러 개의 Thread가 동시에 실행되는 환경
Thread Context
Thread는 1개의 CPU에서 동시에 실행되는 것처럼 흉내내는 방법. ==>스케쥴러가 순서와 간격을 정해서 실행해야 함.
운영체제 : CPU의 실행시간을 잘게 쪼개어 스레드를 조금씩 순서대로 실행==>동시에 실행되는 것처럼 보이게 만든다.
약 0.02초 정도로 시간을 분할. 분할된 시간 조각 하나=퀸텀(Quantum)
로빈(Round Robin) : 굉장히 빠른 속도로 스레드를 번갈아 가며 실행하는 방식.
Multi Thread
공유 자원을 보호하기 어렵다는 단점이 있다. 공유 자원은 주로 메모리 영역의 전역 변수인 경우가 대부분.
같은 프로세스에 속하는 스레드는 같은 주소 공간에서 실행되어 전역변수를 공유.
두 스레드가 같은 변수에 값을 대입하면 앞쪽 스레드가 대입한 값은 뒤쪽 스레드에 의해 지워진다.
이처럼 스레드가 공유 자원을 서로 사용하려는 상태 : 경쟁 상태(race condition)
race condition 을 해소하기 위해서 실행 순서를 통제하다 보면 최악의 경우 스레드끼리 서로를 기다리는
교착 상태(deadlock)가 발생할 수 있다.
이와 같은 문제들을 해결하기 위해 스레드간 실행 순서를 제어할 수 있는 기술들 : 동기화(Synchronization).
'논문 리뷰 > Accelerating Dynamic Graph Analytics on' 카테고리의 다른 글
Synchronization (0) | 2020.11.25 |
---|---|
Red-Black Tree (0) | 2020.11.25 |
Muex (0) | 2020.11.25 |