꾸준한 개발자

계속적인 성장을 추구하는 개발자입니다. 꾸준함을 추구합니다.

계속 쓰는 개발 노트

운영체제 (OS)

스레드

gold_dragon 2021. 4. 21. 20:33

Light Weight Process라고도 부릅니다.

프로세스의 경우에는 프로세스 간에 데이터 접근이 불가능했지만, 스레드의 경우 하나의 프로세스에 여러 개의 스레드를 생성할 수 있고 스레드들은 동시에 실행 가능합니다. 또한 프로세스 안에 있기 때문에 프로세스의 데이터에 모두 접근 가능합니다. IPC 기법이 필요하지 않습니다.

 

스레드는 stack 영역에 생성되면서 각 스레드 별로 stack pointer와 pc를 갖게됩니다. stack 영역만 스레드 별로 구분되고 heap과 data, code 영역은 같습니다. 그렇기 때문에 IPC 기법 없이도 데이터 공유가 가능합니다.

 

보통 소프트웨어 병행 처리를 위해서는 multi thread를 사용합니다.

 

멀티 태스킹은 하나의 cpu에 여러 프로세스를 실행하는 것이고, 멀티 processing은 여러 cpu와 여러 프로세스를 실행하는 것입니다. 최근 CPU는 멀티 코어를 가지므로, Thread를 여러 개 만들어서 멀티 코어 활용도가 높습니다.

장점

사용자에 대한 응답성을 향상시킬 수 있습니다. 스레드를 사용하면 멀티 태스킹이나 멀티 프로세싱과 같이 동시 실행이 가능해서 응답 시간을 줄일 수 있습니다.

 

자원을 공유할 수 있기 때문에 효율성을 높일 수 있습니다. IPC 기법과 같이 프로세스간 자원 공유를 위해 번거로운 작업이 필요없고 프로세스 안에 있기 때문에 프로세스의 데이터에 모두 접근 가능합니다.

 

작업이 분리되어서 코드가 간결합니다. thread 별로 함수를 실행하게 되고 각 thread 별로 코드를 쓸 수 있기 때문에 코드가 간결해질 수 있습니다.

단점

스레드 중 한 스레드만 문제가 있어도, 전체 프로세스가 영향을 받습니다.

 

스레드를 많이 생성하면, Context Swiching이 많이 일어나기 때문에 성능이 저하됩니다. 리눅스 OS의 경우 thread를 process와 같이 다루는데 모든 스레드를 스케줄링해야하기 때문에 context swiching이 빈번하게 일어납니다.

Thread vs Process

프로세스는 독립적이고 스레드는 프로세스의 서브넷입니다.

프로세스는 각각 독립적인 자원을 갖는데 반해, 스레드는 프로세스 자원을 공유합니다.

프로세스는 자신만의 주소영역을 갖지만, 스레드는 주소영역을 공유합니다.

프로세스간에는 IPC 기법으로 통신해야 하지만, 스레드는 IPC 기법이 필요없습니다.

POSIX 스레드는 Thread 관련 표준 api입니다.