하루에 한 문제
Thread(쓰레드)란? 본문
쓰레드의 사전적 의미는 "프로세스 내에서 실행되는 여러 흐름의 단위"이다.
- 하나의 프로세스는 적어도 하나의 메인 스레드를 실행하고 있다.
- 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.
- Stack을 분리한 이유는 Stack에는 함수의 호출 정보가 저장되는데, Stack을 공유하면 LIFO 구조에 의해 실행 순서가 복잡해지기 때문에 실행 흐름을 원활하게 만들기 위함이다.
- 프로세스 내의 주소 공간이나 자원들(힙 공간 등)을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다.
- 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다. 반면에 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.
- 각각의 스레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있다.
- 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있다
워드를 예로 들어보자.
- 워드에서 글자를 입력하는 동안 파일을 주기적으로 "자동저장"한다.
- 또한 내용을 프린트에 "출력"하고
- 입력하는 동안 자동으로 "맞춤법 검사"를 진행한다.
- 사용자의 입력을 받는 동안 행하는 이 모든 작업들은 각각의 쓰레드에 의해서 이루어진 것이다.
- 즉, 워드라는 하나의 프로세스에 여러 개의 쓰레드가 모여있는 것이다.
쓰레드를 사용하는 이유는 뭘까?
쓰레드를 이용하면 하나의 프로그램에서 한 번에 하나의 일을 처리하는 것이 아니라 동시에 많은 일을 처리할 수 있다.
그림에서처럼 하나의 프로세스에서 처리해야 하는 세 가지 작업 A, B, C가 있다고 치자.
첫 번째와 같이 처리하는 경우보다 두 번째처럼 동시에 처리하는 것이 처리속도가 훨씬 빠르다
참고
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
'CS > 운영체제' 카테고리의 다른 글
스케줄러 (scheduler) + Job,Ready,Device Queue란? (0) | 2021.05.18 |
---|---|
멀티 프로세스와 멀티 스레드 (0) | 2021.05.18 |
프로세스 간 통신 (IPC, Inter Process Communication) (0) | 2021.05.18 |
프로세스 (0) | 2021.05.17 |
캐시 (0) | 2021.05.17 |
Comments