[Computer Science]/[운영체제(OS)]

[운영체제(OS)] 4-2) 스레드 라이브러리, 암묵적 스레딩

극꼼 2023. 1. 17. 20:29
반응형


<스레드 라이브러리 (Threads Library)>

: 프로그래머가 스레드를 생성하고 관리하기 위한 API.

 

- 스레드 라이브러리를 구현하는 방법에는 두 가지가 있습니다.

1) 커널의 지원 없이 완전히 사용자 공간에 라이브러리 제공.

2) 운영체제에 의해 지원되는 커널 수준의 라이브러리를 구현.

 

- 다수의 스레드를 생성하는 방법

1) 비동기 스레딩(asynchronous threading) : 부모가 자식 스레드를 생성한 후에 실행을 재개 -> 부모와 자식 스레드가 서로 독립적으로 병행하게 실행되는 스레딩 방식으로, 다중 스레드 서버에서 주로 사용합니다.

2) 동기 스레딩(synchronous threading) : 부모 스레드가 하나 이상의 자식 스레드를 생성하고 자식 스레드 모두가 종료할 때까지 기다렸다가 자신의 실행을 재개하는 스레딩 방식(상당한 양의 데이터 공유를 수반합니다)

<스레드 라이브러리 종류>

: POSIX Pthreads, Windows, Java 3 종류의 라이브러리가 현재는 주로 사용됩니다.

1) Pthreads : Linux, macOS를 포함한 많은 시스템이 사용.

2) Windows : Pthreads 기법과 유사한 점이 많습니다. Windows API에서 스레드는 CreateThread() 함수에 의해 생성되고, 해당 함수에 스레드를 위한 속성의 집합이 전달됩니다.

3) Java : 적어도 하나의 단일 제어 스레드를 포함. Java에서 스레드를 생성하려면 Thread 객체를 생성하고, Runnable을 구현하는 클래스의 인스턴스를 전달한 다음 Thread객체의 start() 메서드를 호출합니다.


<암묵적 스레딩(Implicit Threading)>

: 스레딩의 생성과 관리 책임을 개발자가 하는 것이 아닌 컴파일러와 런타임 라이브러리에 넘겨주는 것입니다. 

암묵적 스레딩의 종류에는 어떤 것들이 있는지 이번 포스팅에서 알아보겠습니다.

1. 스레드 풀(Thread Pool)

: 지정된 개수의 스레드를 미리 생성해두고, 필요할 때 꺼내서 쓰는 방식. 스레드 풀에 있는 스레드를 모두 사용하면 다음 스레드를 기다립니다. 요청이 폭증해도 스레드를 새로 만들지 않기 때문에 성능을 유지하며, 대량 작업 처리에서 반드시 고려할 필요가 있습니다. 

- 스레드 풀이 필요한 이유 : 서비스가 필요할 때 스레드를 새로 만드는데 시간이 걸리고, 작업이 끝나면 스레드를 삭제하는게 비효율적이고, 필요할 때 스레드를 무제한으로 만들면 자원은 한정되어 있기 때문에 성능이 좋지 않기 때문입니다.

 

- 장점 : 급격한 성능 저하를 방지하며, 동시 사용자수가 증가해도 미리 만들어둔 스레드 풀로 대응할 수 있습니다. 이전에 생성한 스레드를 재사용하기 때문에 시스템 자원 측면에서도 좋습니다.

- 단점 : 스레드를 스레드 풀에 과다 생성했는데 실제 사용 스레드가 적을 경우 메모리 측면에서 낭비가 발생할 수 있습니다. 

2. Fork Join

: 메인 부모 스레드가 하나 이상의 자식 스레드를 fork(병렬 작업을 할당) 한 다음에 자식의 종료를 기다린 후 join하고 그 시점부터 자식의 결과를 확인하고 결합하는 방법입니다. 라이브러리는 생성되는 스레드 수를 관리하며 스레드에 작업을 배정합니다.

 

 

반응형