스레드
Thread
스레드
프로세스에 포함되어 일부 기능 만을 수행하는 병렬 프로그래밍 프로세스이고 함수 단위 수행을 한다.
멀티스레드
한 프로세스가 실행되는 영역 내에서 스레드끼리 메모리를 공유하고, 작업을 분할하여 수행한다.
프로세스와 스레드

프로세스는 간단히 말하면 하나의 작업이고, 스레드는 그 작업을 수행하는 흐름에 해당한다.
프로세스에는 여러 개의 스레드가 속해있는데, 이 스레드들은 프로세스의 PCB 영역에 있는 Code 영역, Data 영역, BSS 영역 등의 자원들을 서로 공유하며 동작한다.
각 프로세스는 서로 독립된 영역에서 동작하지만, 같은 프로세스에 속해있는 스레드는 같은 메모리 영역 내에서 동작한다.
컨텍스트 스위칭
작업 중인 프로세스와 스레드는 각기 다른 프로세스와 스레드로 교체될 수 있다. 이를 컨텍스트 스위칭(Context Switching : 문맥 교환)이라고 부른다.
컨텍스트 스위칭을 하는 이유
-
두 개 이상의 프로세스나 스레드를 동시에 실행시키기 위해
-
우선순위가 높은 작업을 우선적으로 처리하기 위해
-
각 프로세스와 스레드에 시간을 공평하게 분배하기 위해
컨텍스트 스위칭의 원인
-
I/O와 같은 인터럽트 발생 시
-
주어진 시간이 다 됐을 시
와 같은 이유들로 발생한다.
컨텍스트 스위칭 오버헤드
오버헤드(Overhead)란 특정 작업을 수행하기 위해 필요한 시간 등의 리소스를 말한다.
컨텍스트 스위칭을 할 때도 오버헤드가 발생한다.
그렇기에 잦은 컨텍스트 스위칭은 과도한 오버헤드를 초래하기에 좋지 않다.
레이스 컨디션
경쟁 상태(Race Condition)는 두 개 이상의 프로세스나 스레드가 동시에 같은 장소에 접근하는 경우, 수행 결과가 어떻게 될지 예측이 불가능한 상태를 말한다.
서로가 해당 장소를 사용하기 위해 경쟁하기 때문에 어떤 프로세스(스레드)가 먼저 종료될 지 예측할 수 없는 것이다.
임계 영역
임계 영역(Critical Section)은 공유 불가능한 자원인 임계 자원을 사용할 수 있는 공간이다.
그래서 임계 영역은 레이스 컨디션을 방지하는 방법 중 하나로 꼽힌다.
임계 영역은 상호 배제 객체를 통해 공유 자원을 배타적으로 사용할 수 있도록 해야한다.
임계 영역의 단점이라고 한다면 임계 영역 내에 있는 프로세스(스레드)가 나올 때까지 기다리고 있어야 한다는 것이다.
뮤텍스

상호 배제(Mutual Exclusive)는 임계 영역에 이미 프로세스(스레드)가 존재할 때, 다른 프로세스 등이 접근하지 못하게 막기 위해 사용된다.
뮤텍스는 객체 형태의 Key를 소유한 프로세스만이 공유 자원에 접근할 수 있도록 하는 방법이다. 그리고 해당 프로세스가 공유 자원 사용을 완료한 후 Key를 반납해야만 다음 프로세스가 Key를 소유할 수 있다.
한 마디로 두 개 이상의 프로세스가 동시에 Key를 소유할 수 없다는 것이다.
세마포어
세마포어(Semaphore)는 뮤텍스처럼 임계영역에 프로세스나 스레드가 접근하는 것을 막기 위해 사용된다.
세마포어는 소유가 불가능 하고, 둘 이상의 프로세스가 사용하는 것도 가능하다.
뮤텍스처럼 Key를 소유하게 하는 것이 아닌 사용하고 있는 프로세스가 있을 경우, 프로세스가 해당 임계 영역을 사용 중인지를 알려준다고 생각하면 된다.
데드락

교착상태(Dead Lock)는 한정된 자원을 두 개 이상의 프로세스가 사용하는 경우에 서로 상대방의 프로세스가 사용하고 있는 자원을 원하는 경우에 양쪽 프로세스 모두 작업을 완료할 수 없는 경우를 말한다.