[OS] Thread

Thread

스레드는 프로세스 내의 작업 단위이다. 스레드는 프로세스의 생성에 대한 오버헤드가 많기 때문에 개발되었다. 새로운 요청에 대한 작업을 새로운 프로세스의 생성이 아닌 스레드의 생성으로 작업을 하는것이다. 스레드간의 통신을 위해서는 메모리 영역을 사용하거나 시그널을 통해 제어한다.

Benefits

  1. Responsiveness
    프로그램의 일부분이 Block되거나 프로그램이 긴 작업을 수행하더라도 프로그램이 계속 실행되는 것을 허용함으로써 사용자에 대한 응답성을 증가시킨다.

  2. Resource Sharing
    프로세스는 IPC와 같은 방법을 통해서만 자원을 공유할 수 있다. 하지만 스레드는 자동적으로 속한 프로세스의 자원들과 메모리를 공유한다. 이 때 공유되는 메모리는 코드, 데이터, 힙 영역이다. 스택 메모리는 독립적으로 가지게 되는데 이는 스레드 각각의 실행 흐름을 보장하기 위해서이다. 레드는 프로세스 내에서 독립적으로 실행흐름을 가져야하고 그 과정에 있어 독립적인 함수 호출에 있는 매개변수와 지역변수의 바인딩, 함수 종료시 복귀할 주소정보, 현재 실행중인 코드라인에 대한 정보들을 개별적으로 관리하기 위함이다.

  3. Economy
    스레드는 자식이 속한 프로세스의 자원들을 공유하기 때문에 스레드를 생성하고 Context Switching하는 행위가 더 경제적이다.

  4. Scalability
    다중 스레드는 다중 처리기 구조에서 장점을 발휘한다. 다중 처리기 구조에서는 각각의 스레드가 다른 처리기에서 병렬로 실행될 수 있기 때문이다.

Author: Song Hayoung
Link: https://songhayoung.github.io/2020/07/21/OS/thread/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.