[CS] 스레드
1. 프로세스 (Process)
프로세스란 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램이라고 할 수 있다. 즉, 사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 실행 중인 것을 말한다. 프로세스는 프로그램에 사용되는 데이터와 메모리 등의 자원(리소스, resource) 그리고 스레드로 구성된다.
2. 스레드 (Thread)
스레드란 프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다.
두 개 이상의 스레드를 가지는 프로세스를 멀티 스레드 프로세스라고 한다.
3. 멀티 스레드 (Multi thread)
일반적으로 하나의 프로세스는 하나의 스레드를 가지고 작업을 수행한다. 그러나 멀티 스레드는 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 의미한다. 또한 멀티 프로세스는 여러 개의 CPU를 사용하여 여러 프로세스를 동시에 수행하는 것을 의미한다.
멀티 스레드와 멀티 프로세스 모두 여러 흐름을 동시에 수행한다는 공통점을 가지고 있다. 멀티 프로세스는 각 프로세스가 독립적인 메모리를 가지고 별도로 실행되지만, 멀티 스레드는 각 스레드가 자신이 속한 프로세스의 메모리를 공유하므로 시스템 자원의 낭비가 적다. 또한 하나의 스레드가 작업을 할 때 다른 스레드가 별도의 작업을 할 수 있어 사용자와의 응답성도 좋아진다.
4. 문맥 교환 (Context switching)
컴퓨터에서 동시에 처리할 수 있는 최대 작업 수는 CPU의 코어(core) 수와 같은데, 만약 CPU의 코어 수 보다 더 많은 스레드가 실행되면 각 코어가 정해진 시간 동안 여러 작업을 번갈아가며 수행하게 된다.
이때 각 스레드가 서로 교체될 때 스레드 간의 문맥 교환이라는 것이 발생한다. 문맥 교환이란 현재까지의 작업 상태나 다음 작업에 필요한 각종 데이터를 저장하고 읽어오는 작업을 가리킨다.
이러한 문맥 교환에 걸리는 시간이 커지면 커질수록 멀티 스레딩의 효율이 저하되기 때문에 오히려 많은 양의 단순한 계산은 싱글 스레드로 동작하는 것이 더 효율적 일 수 있다. 따라서 많은 수의 스레드를 실행하는 것이 언제나 좋은 성능을 보이는 것은 아니라는 점을 유의해야 한다.
5. 스레드 그룹 (Thread group)
스레드 그룹이란 서로 관련이 있는 스레드를 하나의 그룹으로 묶어 다루기 위한 장치이다. 스레드 그룹은 다른 스레드 그룹을 포함할 수도 있으며, 이렇게 포함된 스레드 그룹은 트리 형태로 연결되어 스레드가 접근할 수 있는 범위를 제한할 수 있기 때문에 보안상의 중요한 역할을 한다.
6. 데몬 스레드 (Demon thread)
데몬 스레드란 다른 일반 스레드의 작업을 돕는 보조적인 역할을 하는 스레드를 가리킨다. 데몬 스레드는 일반 스레드가 모두 종료되면 더는 할 일이 없으므로 데몬 스레드 역시 자동으로 종료된다.
데몬 스레드는 일정 시간마다 자동으로 수행되는 저장 및 화면 갱신 등에 이용된다.
7. 가비지 컬렉터 (Garbage collector)
데몬 스레드를 이용하는 가장 대표적인 예로 가비지 컬렉터를 들 수 있다. 가비지 컬렉터란 프로그래머가 동적으로 할당한 메모리 중 더 이상 사용하지 않는 영역을 자동으로 찾아내어 해제해 주는 데몬 스레드이다.
프로그래머 대신에 가비지 컬렉터가 자동으로 메모리를 관리해주기 때문에 프로그래밍을 하기가 훨씬 쉽고 메모리에 관련된 버그가 발생할 확률도 낮아진다.
보통 가비지 컬렉터가 동작하는 동안에는 프로세서가 일시적으로 중지되므로, 필연적으로 성능의 저하가 발생한다. 하지만 요즘에는 가비지 컬렉터의 성능이 많이 향상되어 새롭게 만들어지는 대부분의 프로그래밍 언어에서 가비지 컬렉터를 제공하고 있다.
출처