음.. 하나 더 갑니다. ㅇㅅㅇ
멀티쓰레딩은 하나의 작업 또는 프로세서가 보다 빠른 시간에 문맥 교환 없이 교체되어 동작할 수 있는 여러 개의 쓰레드로 구성하여 작업을 수행하는 방식을 말합니다. (좀 헷갈리죠?) 쓰레드란 하나의 프로세스를 더욱 세분화하는 경우에 쓰이는 단위로써, 일반적으로 하나의 프로세스가 하나의 쓰레드로 되어 있으나 멀티쓰레딩에서는 하나의 프로세스 안에서 여러 개의 쓰레드로 나뉘어져서 동작합니다.
하나의 쓰레드로 구성된 프로그램은 선형적으로 일을 처리 하지만, 멀티쓰레딩된 프로그램은 어떠한 업무라도 병렬적으로 실행합니다. 멀티쓰레딩 프로그램을 작성하려면, 쓰레드 스케쥴링 같은 추가적인 사항을 고려해야 합니다. 스케쥴링은 쓰레드를 동기화 되게 유지 시켜주는 것이고 모든 것이 순서대로 일어나고 있는지 확인하는 작업입이다. 대게 운영체제에서 이루어 지게 됩니다. 아니면 쓰레드 컨트롤을 해주는 별도의 하드웨어 레벨 혹은 운영체제 레벨의 동작 장치가 있게 됩니다.
멀티쓰레딩을 실행하는 방법에는 non-blocking과 blocking 방법이 있습니다. Non-blocking 방법은 쓰레드의 모든 피연산자가 도착하기 전에는 쓰레드를 실행할 수 없습니다. 이 말은 쓰레드가 한번 실행되면 정지하지 않는다는 것과 같은 말입니다.
반면에 Blocking 방법은 쓰레드의 모든 피연산자가 도착하지 않아도 쓰레드를 실행할 수 있습니다. 도착하지 않은 피연산자가 필요하거나 또는 동기화가 필요할 때, 그 쓰레드를 정지(block)시키고 나중에 다시 실행합니다. 프로세서는 모든 필요한 상태 정보를 저장하고, 실행을 위해 다른 준비된 쓰레드를 로드하게 됩니다. Blocking 쓰레드 방법은 block된 쓰레드의 저장을 위해 추가적인 하드웨어 장치를 요구하는 쓰레드 생성에서 더 관대한 접근방법을 제공합니다.
멀티쓰레딩 실행시 장점은 다음과 같습니다.
- 쓰레드가 동적으로 스케쥴링된다.
- 쓰레드 할당과 해제를 통해 메모리를 효율적으로 사용한다. 쓰레드는 기본적으로 프로세스가 할당받은 메모리를 이용하여 처리하기 때문에 추가 메모리 구성이 필요 없습니다.
- 병렬 수행의 정도가 쓰레드의 크기에 의해 정적으로 제어된다. 병렬 처리에 필요한 수 = 쓰레드 수가 됩니다.
반면, 멀티쓰레딩 실행의 단점도 존재합니다.
- 쓰레드를 생성하면서 병렬 수행이 조금 희생된다. 이것은 병렬 처리가 필요하지 않은 과정을 통해서 쓰레드를 생성하기 때문에 생기는 것으로 쓰레드의 생성 및 처리하는 동안의 프로세스에서는 병렬 작업이 진행되지 않는 것을 말합니다.
- 쓰레드 관리 하드웨어가 필요하다. 쓰레드 컨트롤은 OS와 처리기(하드웨어) 간의 처리 문제기 때문에 관리를 해줄 하드웨어가 필요하게 됩니다.
쓰레드에 관한 더 궁금한 것은 프로그램 언어를 배우다 보면 쓰레드를 다루는 법에 대해서 더 자세하게 배울 겁니다. (특히 자바나 C++이나..) 그만큼 많이 쓰이는 것이기 때문에 잘 알아두면 좋습니다.