스레드(Thread)는 실행의 단위이며, 프로세스를 구성하는 실행 흐름의 단위이다
스레드마다 실행에 필요한 최소한 값을 가지고 있다.
😋 프로세스의 스레드들은 실행에 필요한 최소한의 정보만을 유지한 채 실행된다는 점인데, 프로세스의 자원의 공유한다는 점이 핵심이다!
위 그림에서 스레드 1만의 데이터, 힙영역이 있는 것이 아니라 스레드1,2,3 모두 같은 메모리 영역을 공유하고 있다는 점!!
- 리눅스에서는 프로세스와 스레드를 구분하지 않는다.
- 결국은 실행의 문맥일 뿐
둘의 차이는 뭘까?????
둘의 큰 차이점은 프로세스끼리는 자원을 공유하지 않지만, 같은 프로세스끼리는 자원을 공유한다.
참고로 ! 이렇게 메모리 낭비를 방지하기위해 fork 직후 같은 프로세스를 통째로 메모리에 중복 저장하지 않으면서 동시에 프로세스끼리 자원을 공유하지 않는 방법도 있다!
이를 쓰기 시 복사(copy on write) 기법이라 한다.
이렇게 프로세스를 병행하는 것보다 메모리를 더 효율적으로 사용할 수 있다. 서로의 협력과 통신에 유리함! 하지만 공유한다는 것이 단점이 될 수도 있는데, 멀티스레드 환경에서 하나의 스레드에 문제가 생기면 프로세스 전체에 문제가 생길 수 있다. 왜냐! 프로세스 자원을 공유하여 다른 프로세스에 영향을 끼치기 때문이다.
같은 컴퓨터이지만 통신을 주고 받는다.
텍스트.txt를 A 프로세스는 쓰는 프로세스, B 프로세스는 읽는 프로세스라면 두 프로세스는 파일을 통한 프로세스 간 통신이다.
공유메모리를 통한 통신은 말 그대로 메모리에 공유메모리 공간을 참조하는 것이다.
이외에도 프로세스들은 소켓, 파이프를 통해 통신할 수 있다.
프로그램 실행 시 프로세스 ID를 확인할 수 있다.!