C# 운영체제 쓰레드 코드 알아보러 가기
쓰레드(Thread)
음식점 - 프로세스
직원 - 쓰레드
영혼 - CPU(코어)
01 전통적 프로세스(heavy weight process)
프로세스 간의 공유 변수를 갖기 어렵다. 운영체제가 제공하는 특수 구조체나 공유파일을 사용(pipe, shared memory, signal, socket 등)
02 쓰레드(thread, light weight process)
프로세스 내에 같이 존재하는 Thread는 Heap영역과 데이터영역 공유한다. statck만 따로 갖고 있다.
하나의 프로세스 내에 여러 개의 쓰레드를 구성할 수 있다.
03 사용자 쓰래드
응용 프로그램 내에 라이브러리로 구현하고 라이브러리가 쓰래드 생성, 스케쥴링 등의 관리 수행한다.
커널은 사용자가 쓰래드 인식못한다.
장점 : 한 쓰레드가 blocking IO 상태이면 다른 쓰레드도 block된다.
단점 : 커널에 의해 관리될 필요가 없어 생성, 관리가 빠르다.
04 커널 쓰래드
커널이 직접 관리하고 쓰레드 생성, 스케줄링 등의 관리가 커널에서 이루어진다.
단점 : 생성과 관리가 느리다
장점 : 한 쓰레드가 대기 상태로 들어가 블로킹 되어도 다른 쓰레드는 실행이 계속 될 수 있다.
기아 상태(Starvation)
스레드 혹은 프로세스에 우선순위를 둘 수 있지만 그러면 우선순위가 낮은 자원은 계속 할당 받지 못하여 기아 상태가 발생되어 아무일도 하지 못하는 상태가 발생한다.
쓰레드 풀(Thread Pool)
미리 쓰레드를 일정 수량 풀로 만들어두는 것이다. 풀에 사용가능한 쓰레드가 있으면 깨어나고 요청이 즉시 받아들어지고 작업을 완료하면 풀로 들어가서 요청을 기다린다.
01 작업 순서
1. 어플리케이션에서 사용자로부터 들어온 요청을 작업큐에 넣는다.
2. 쓰레드풀은 작업큐에 들어온 Task 일감을 미리 생성해 놓은 Thread에게 요청한다.
3. 일을 다 처리한 Thread들은 다시 어플리케이션에게 결과값을 리턴한다.
02 장점
1. 새로운 쓰레드를 만드는 것이 아니라 기존 쓰레드를 사용하므로 더 빠르다.
2. 쓰레드의 개수를 제한할 수 있다. 많은 수의 쓰레드를 병렬 처리할 수 없는 시스템에 도움이 된다.
3. 쓰레드를 생성하고 종료하는데 드는 overhead를 줄일 수 있다.
'cs공부 > 운영체제' 카테고리의 다른 글
운영체제 - RaceCondition, Atomic (0) | 2023.05.11 |
---|---|
운영체제 - 캐시(Cache)이론 (0) | 2023.05.02 |
운영체제 - 문맥교환(Context switching), 프로세스의 상태 (0) | 2023.04.28 |
운영체제 - 프로세스(Process) (0) | 2023.04.28 |
C# - 운영체제 쓰레드 코드(ThreadPool, Task 등) (0) | 2023.04.27 |
댓글