운영체제

[OS] Implicit Threading

KyooDong 2020. 11. 27. 20:43
728x90

Implicit Threading

프로그래머가 직접 스레드를 만들지 않고, 알아서 만들고 관리해주는 개념

 

3 가지 메인 방법이 존재

  • Thread pools

  • OpenMP

  • Grand Central Dispatch

Thread pool

스레드를 매번 생성하는 것은 큰 오버헤드이므로 프로세스 실행 시에 미리 여러 개의 스레드를 만들어두고 스레드 풀에 저장해둠

요청을 받으면 서버는 풀로부터 스레드를 깨워서 요청을 전달 → 스레드 종료 시 다시 풀로 반환됨 (재활용)

서버가 요청을 받았을 때 스레드 풀에 가용한 스레드가 없다면 가용 스레드가 생길 때까지 대기함

이미 존재하는 스레드에 작업을 요청하는 것이 새로운 스레드를 생성하는 것보다 더 빨리 서비스 받을 수 있음

OpenMP

#pragma omp parallel { <code> }

위와 같은 지시자를 C 프로그램에 삽입하여 implicit threading 을 지원 → 컴파일러가 MP 를 지원해야함

Grand Central Dispatch

Mac, iOS 전용으로, ^{ <code> } 와 같은 방법으로 implicit threading 을 지원

 

이는 두 개의 작업 큐(Dispatch queue)로 구현되며

  • Serial queue : 한 번에 하나의 작업만이 처리될 수 있는 FIFO 큐 (main queue)

  • Concurrent queue : 한 번에 여러개의 작업이 처리될 수 있는 FIFO 큐