럿고의 개발 노트
운영체제 - Thread(쓰레드) 본문
운영체제 - Thread(쓰레드)
Thread의 개념
- 프로세스의 처리속도를 높이기 위해 프로세스가 수행해야 할 여러 작업들을 나누어서 수행할 수 있도록 설계된 것
- 프로세스는 자신만의 영역을 가지고 있지만, 쓰레드는 자신만의 영역이 존재하지는 않음
- 모든 쓰레드는 프로세스의 상태를 공유
- 즉, 쓰레드간 별도 통신이 필요하지 않음
- Light Weight Process
- 각 프로세스간에 데이터 접근이 불가
- 접근하기 위해서는 IPC가 필요
- IPC(Inter-Process Communication) : 프로세스 간 통신
주요 방식은 파일, 신호, 소켓, 메시지 큐, 파이프, 지명 파이프, 세마포어, 공유 메모리 등등이 있음 - https://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4_%EA%B0%84_%ED%86%B5%EC%8B%A0
- IPC(Inter-Process Communication) : 프로세스 간 통신
- 접근하기 위해서는 IPC가 필요
- 하나의 프로세스에서 여러개의 쓰레드를 생성할 수 있고 쓰레드들은 동시에 실행이 가능함
- 프로세스 안에 있으므로, 프로세스의 데이터를 모두 접근 가능
쓰레드의 등장
- 커널 내의 스택이 하나이기 때문에 속도가 떨어져서 커널스레드를 구상하기 시작함
- 커널스레드 각자가 스택을 가짐으로써 동시에 여러 프로세스, 커널 내부에서 수행할 수 있게 됨
쓰레드의 동작
- 하나의 프로세스에서 가장 핵심이 되는 것은 PC(Program Counter), SP(Stack Pointer)
- 쓰레드는 각 스택 영역을 가지고 있는 하나의 함수라고 생각하면 이해가 쉬움
멀티 쓰레드 - S/W 병행 작업 처리를 위해 사용
멀티 프로세싱 vs Thread
- 멀티 태스킹
- 하나의 CPU에서 수시로 프로세스를 변경하면서 프로그램을 실행
(사람 눈에는 모든 프로세스가 동시에 실행되는 것처럼 보이지만, 프로세스는 하나만 실행됨)
- 하나의 CPU에서 수시로 프로세스를 변경하면서 프로그램을 실행
- 멀티 프로세싱
- 하나의 프로세스를 여러개의 CPU를 사용해서 실행
- 하나의 프로세스를 여러개의 CPU를 사용해서 실행
- 멀티 쓰레드
- 여러개의 쓰레드를 만들어서 멀티 코어를 통해 활용도를 높임
쓰레드의 장단점
- 장점
- 사용자에 대한 응답성 향상
- 여러개의 기능을 각기 다른 쓰레드에 할당 시켜서 작업처리 시간 향상
- 서버가 동시에 접속한 클라이언트에 대응하기 위해 별도 쓰레드를 생성해 응답
- 자원 공유 효울
- 프로세스의 데이터를 모두 접근 가능
- 작업 분리로 인해 코드 간결
- 사용자에 대한 응답성 향상
- 단점
- 여러개의 쓰레드 중 하나의 쓰레드에 문제가 있어도, 전체 프로세스가 영향을 받음
- 쓰레를 많이 생성하면 context switching이 많이 일어나서 성능 저하
- 모든 쓰레드를 스케쥴링해야 하기 때문
- context switching : 현재 진행하고 있는 Task의 상태 저장, 다음 진행할 Task의 상태 값을 읽어 적용하는 과정
프로세스 vs 쓰레드
- 프로세스 독립적 / 쓰레드는 프로세스의 서브셋
- 프로세스는 독립적 자원을 가짐 / 쓰레드는 프로세스 자원 공유
- 프로세스는 독립적 주소 영역 / 쓰레드는 주소영역 공유
- 프레서스간에는 IPC통신을 해야함 / 쓰레드는 필요 없음
쓰레드의 동기화(Synchronization)
- 프로세스 내에 여러개의 쓰레드가 형성
- 프로세스 안에 있는 영역 공유
- 그러면 공유하고 있는 프로세스 자원에 동기화 문제가 발생할 수 있음
- 실행순서는 스케쥴러가 상황에 맞게 결정되기 때문에 동기화 문제 발생
교착상태(deadlock) / 기아상태(Starvation)
- 교착상태
- 여러개의 작업이 서로 상대방의 작업이 끝나기만을 기다리기 때문에 다음 단계로 진행하지 못하는 상태
- 배치 처리 시스템에서는 일어나지 않음
- 프로세스, 스레드 둘다 이와 같은 상태가 발생할 수 있음
- 무한 대기 상태라고도 함
- 여러 프로세스가 동일 자원 점유를 요청할때 발생
- 교착상태 발생 조건
- 상호배제 : 프로세스들이 필요로 하는 자원에 대한 배타적인 통제권 요구
- 점유대기 : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다림
- 비선점 : 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을수 없음
- 순환대기 : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있음
- 기아상태
- 특정 프로세스의 우선순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태
- 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할때, 특정 프로세스는 영원히 자원이 할당되지 않는 경우
출처
운영체제 - Thread(스레드)
스레드(Thread) 의 개념 - 프로세스의 처리속도를 높이기 위해 하나의 프로세스가 수행해야 할 여러 작업들을 나누어 수행할 수 있도록 설계된 것이 스레드 - 1개의 프로세스를 3개의 스레드로 구성한 것은 3개의 프로세스와 같은 처리속도를 낼 수 있다. - 프로세스는 자신만의 영역을 갖고 있지만, 스레드는 그렇지 않다. - 한 프로세스에 존재하는 모든...
velog.io
'Etc Note' 카테고리의 다른 글
마이크로소프트웨어 콘퍼런스 2019(MASOCON 2019) 후기 (0) | 2019.11.24 |
---|
Comments