드디어 스레드 스레드란 무엇일까?
스레드란 프로세스를 구성하는 실행의 흐름 단위이다.
하나의 프로세스는 여러 개의 스레드를 가질 수 있다.
스레드를 이용하면 하나의 프로세스에서 여러 부분을 동시에 실행할 수 있다.
요렇게 여러 스레드가 하나의 프로세스에서 동시에 실행됨
우선 위에 언급한 내용과 다르게 전통적 관점에서는 프로세스가 한 번에 하나의 일만 해왔다.
이를 단일 스레드 프로세스라고 한다.
이후 하나의 프로세스가 한 번에 여러 일을 동시에 처리할 수 있게 되면서 여러 명령어를 동시에 실행할 수 있게 되었다.
이를 멀티 스레드 프로세스라고 한다.
스레드의 구성 요소를 확인해보자.
스레드는 프로세스 내에서 각기 다른 스레드 ID, 프로그램 카운터 값을 비롯한 레지스터 값, 스택으로 구성된다.
따라서 스레드마다 각기 다른 코드를 실행할 수 있는 것이다.
프로세스의 스레드들은 실행에 필요한 최소한의 정보(스레드 ID를 뺀 정보)만을 유지한 채 프로세스 자원을 공유하며 실행된다.
1 프로세스 - 여러 스레드
여러 프로세스 - 더 여러 프로세스
이거 아님? ㅋ
여러 프로세스를 동시에 실행하는 것을 멀티 프로세스라고 하고,
여러 스레드로 프로세스를 동시에 실행하는 것을 멀티 스레드라고 한다.
여러 프로세르를 실행하는 것 vs 여러 스레드를 실행하는 것
프로세스끼리는 기본적으로 자원을 공유하지 않지만 스레드끼리는 같은 프로세스 내의 자원을 공유한다.
그니까 프로세스는 fork작업이 일어나면 자원이 복사되어 메모리에 적재된다.
반면, 스레드는 각기 다른 값을 가질 뿐 프로세스 내부의 자원을 공유하므로
여러 프로세스를 병행 실행하는 것보다 메모리를 더 효율적으로 사용할 수 있다.
또한 스레드는 서로 협력과 통신에 유리하다.
이 그림을 보면 조금은 이해가 될랑가
물론 자원을 공유하기 때문에 문제가 생기는 경우도 있다.
자원이 잘못되면 그 자원을 공유받은 모든 스레드가 문제가 생긴다는... 그런 거 하지만 편리했죠?