스레드 Thread 란 무엇인가

Thread 는 실행의 단위이다 , 프로세스를 구성하는 실행의 흐름 단위이다.

하나의 프로세스는 여러 개의 스레드를 가질 수 있으며 , 스레드를 이용하면 하나의 프로세스에서 여러 부분을 실행할 수 있다.

프로세스와 스레드 Process & Thread

프로세스가 하나의 실행 흐름을 갖는다면 그건 바로 단일 스레드 프로세스라고 할 수 있다.

프로세스는 여러 개의 스레드를 가질 수 있다고 했다, 스레드라는 개념이 도입 되면서 하나의 프로세스가 한 번에 여러 일을 동시에 처리를 할 수 있게 되었다.

멀티 스레드

멀티 스레드는 프로세스 내부에서 각기 다른 Thread ID , Program Counter , Register Value , Stack 으로 구성이 되어 있다.

그렇게 각자가 다른 스레드 ID , 프로그램 카운터 , 레지스터 값들 , 스택을 갖고 있으므로 각기 다른 코드를 실행할 수 있고 갖고 있는 값들은 실행에 필요한 최소한을 정보만을 유지한 채 프로세스 자원을 공유하면서 실행이 된다는 점이다.

그렇기 때문에 이렇게 보면 스레드는 프로세스를 구성하는 실행 단위라고 할 수 있다.

멀티 프로세스와 멀티 스레드

여러 프로세스를 동시에 실행하는 것을 멀티 프로세스 Multi Process 라고 하며 , 여러 스레드로 프로세스를 동시에 실행하는 것을 멀티 스레드 Multi Thread 라고 한다.

그 둘의 차이가 뭘까?

멀티 스레드로 같은 작업을 수행하나 , 멀티 프로세스로 같은 작업을 2개를 수행하나 어떤 차이가 있을까?

“프로세스끼리는 기본적으로 자원을 공유하지 않지만 , 스레드 끼리는 같은 프로세스 내의 자원을 공유한다”

핵심은 통신

기본적으로 다른 프로세스들은 자원을 공유하지 않지만 **스레드는 프로세스의 자원을 서로 공유하기 때문에 서로 협력과 통신에 유리**하다.

하지만 이는 장점이자 단점이다. 멀티프로세스 환경에서는 하나의 프로세스에 문제가 생겨도 다른 프로세스에는 지장이 없지만 , 멀티 스레드 환경에서는 하나의 스레드에 문제가 생기면 프로세스 전체에 문제가 생길 수 있다. 모든 스레드는 자원을 공유하고 하나의 스레드에 문제가 발생하면 다른 스레드도 영향을 끼치기 때문이다.