- 실질적인 실행의 기본 단위
- Linux, Windows등 대부분의 커널에서 실행의 실질적인 단위는 프로세스가 아니라 스레드임!!
- 스케쥴링의 단위
쓰레드는 해당 프로세스 안의 메모리를 공유해서 사용할 수 있다.
일반적으로 프로세스는 최소한 하나의 쓰레드를 가지고 있다. 둘 이상의 스레드를 가지고 있다면 이는 멀티스레드라고함.
Responsiveness(응답성) : 프로세스의 일부가 차단되었음에도 나머지 스레드는 계속해서 실행될 수 있음. ex) UI같이 응답성이 중요한 부분에서 사용자와의 상호작용을 계속해서 유지하여야 하기 때문
Resource Sharing(자원 공유) : 쓰레드는 하나의 프로세스 내에서 실행되므로 프로세스의 자원을 공유 할 수 있고 이는 공유 메모리나 메세지패싱보다 효과적이다.
Economy(경제성) : 쓰레드를 생성하는 것이 프로세스를 생성하는 것보다 더 적은 자원을 소비하며, 쓰레드 전환은 프로세스간 전환보다 오버헤드가 낮다. 이로인해 스레드를 경량 프로세스라고 부르기도 함.
Scalability(확장성) : 멀티프로세서 아키텍처에서 여러 스레드가 동시에 실행될 수 있으므로 프로세스는 다중 프로세서 환경에서 성능을 향상시킬 수 있다.
멀티 프로세스 : 하나의 응용프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 작업을 처리하도록 하는것.
멀티 스레드 : 하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 수행 능력을 향상시키는 것. 이 경우 각각의 스레드는 독립적인 작업을 수행해야 하기 때문에 각자의 스택과 PC 레지스터 값을 갖고 있다.
예시
- Google Docs가 프로세스고, 문서에 참여하는 사용자들을 스레드라 가정
- 만약 멀티 프로세스라면 사용자 한 명당 하나의 Google Docs
- 만약 멀티 스레드라면 여러 사람들이 각자의 임무를 하나의 Google Docs에서 동시에 마무리
- 사용자 수만큼의 Google Docs -> 1개의 Google Docs
--> 사용 자원 감소- 작업 후 여러개의 Google Docs 취합 -> 함께 임무 수행 (취합필요x)
--> 통신 비용 감소
공유 자원에 접근할 때 스레드간 동기화 작업이 필요하다. 하지만 이러한 동기화 작업으로 인해 병목현상이 발생하여 성능이 저하될 수도 있다.
멀티프로세스는 하나의 프로세스가 죽더라도 다른 프로세스에는 영향을 끼치지 않고 수행된다는 장점이 있지만 (카톡하다 오류 발생했다고 틀어놓은 멜론 노래가 꺼지진 않듯이) 멀티스레드는 하나의 스레드가 죽으면 전체 스레드가 죽을 수 도 있음.
멀티스레딩과 멀티프로세싱 이 두가지는 동시에 여러가지를 수행한다는 점은 같지만 시스템에 따라서 적합 부적합이 갈린다 --> 적합한 방식 선택 ㄱㄱ
하나의 작업을 위해 여러개의 cpu 코어를 활용하기 위해 코드를 작성하는 작업
다음은 번외로 프로세스, 스레드, 멀티태스킹, 멀티스레딩, 멀티프로세싱, 멀티프로그래밍 총정리 ㄱ