스레드 관리
스레드란 Light Weight Process로 프로세서 활용의 기본 단위이다. 스레드는 Thread ID, Register Set(PC 등), Stack(Local Data)
등으로 구성되어 있으며, 제어 요소 외 코드, 데이터, 힙 등 기타 자원들은 프로세스의 다른 스레드들과 공유해서 사용한다.
스레드의 장점
일부 스레드의 처리가 지연되어도, 다른 스레드는 작업을 계속해서 처리할 수 있다. 또한, 커널의 개입 없이 자원을 공유해서 효율성이
높다. 프로세스의 생성 및 프로세스 간 문맥 전환에 비해 효율적이다.
스레드의 구현
스레드의 구현은 사용자 수준 스레드와 커널 수준 스레드, 혼합형 스레드로 구분할 수 있다. 사용자 수준 스레드는 POSIX threads,
Java threads API, Win32 threads 등과 같은 사용자 영역의 스레드 라이브러리로 스레드의 생성 및 스케줄링이 가능하다.
사용자 수준 스레드의 경우, 커널의 개입을 받지 않아 생성 및 관리의 부하가 적어 유연한 관리가 가능하며 이식성이 높다.
다대일(N:1) 매핑으로 하나의 스레드가 block 되면 모든 스레드가 대기한다. 반면, 커널 수준 스레드는 커널이 직접 관리하며,
커널 영역에서 스레드의 생성 및 관리가 수행된다. 이에 따라 부하(Overhead)가 크다. 커널이 각 스레드를 개별적으로 관리하는
일대일(1:1) 매핑으로 프로세스 내 스레드들이 병행 수행 가능하여, 하나의 스레드가 block 되더라도 다른 스레드는 작업 수행이
멈추지 않는다. 혼합형 스레드는 N개의 사용자 수준 스레드와 M개의 커널 스레드(N > M)를 이용한 방식으로, 사용자가 원하는 만큼
스레드 사용과 병행 처리가 가능하다.