실행중인 하나의 프로그램
ex) 엑셀, 파워포인트, 메모장, 게임, 카카오톡... 등등
프로그램이 실행되기 위해서는 os로부터 Resource
(자원)을 할당받아서 실행
여기서 할당받게 되는 Resource란
프로세스에 할당된 자원을 가지고 실제로
작업
을실현
하는 것을 쓰레드라고 한다.
하나의 스레드는 하나의 코드 실행 흐름이므로 한 프로세스 내 스레드가 2개라면 2개의 실행 흐름이 생긴다.
싱글 쓰레드 프로세스와 같이 하나의 프로세스(프로그램) 안에 하나의 쓰레드가 존재할 수도 있지만 멀티 쓰레드 프로세스와 같이 하나의 프로세스(프로그램) 실행 과정 속에서 여러 개의 쓰레드가 존재할 수도 있다. 즉 하나의 프로세스가 두 가지 이상의 작업을 처리할 수 있다는 것.
프로세스 내에 쓰레드의 갯수 제한은 존재하지 않지만 일정 수 이상으로 쓰레드가 발생하게 되면 비효율을 발생한다.
왜냐하면 JVM 의 rumtime Data Area 상에서 모든 프로세스가 공유하게 되는 method area와 heap 영역과는 달리 Stack Area는 하나의 쓰레드마다 영역이 할당되기 때문이다.
만약 동기화 문제를 해결하지 못할 경우 데드락 상태
(교착상태)에 빠지게 된다.
자세한 링크는 여기
멀티 프로세스
란 OS에서 할당받은 자원을 가지고 실행하기 때문에 각각의 프로세스
는 서로에 대해서 독립적
이다. 따라서 1이라는 프로세스에서 오류가 발생하더라도 2라는 프로세스에는 영향을 미치지 않는다.
멀티 쓰레드
란 OS가 자원을 할당한 프로세스의 내부에 생성되기 때문에 하나의 쓰레드라도 오류가 발생하게 되면 전체 프로세스가 강제 종료될 수도 있어 전체 프로세스에 영향을 미치게 된다.
OS는 당연히 여러 개의 프로세스가 동시에 존재할 수 있다.
실제로 컴퓨터에서 일을 하는 주체는 CPU, 그 중에서도 core라고 불리는 요소이다.
과거의 cpu에는 하나의 core만이 존재했다.
이럴 경우 다중 프로세싱이 불가능해진다.
하지만 실제로는시분할기법
을 사용하여 마치 다중 프로세싱이 지원되는 것처럼 보이게 한다.
이와 같은 것들을 멀티 태스킹
(다중작업)이라고 한다.
core로 thread를 실행할 때 core의 잉여자원이 발생하는 경우를 발생하게 된다.
이럴 경우, core의 잉여자원을 또다른 thread 실행에 사용하는 방법을 하이퍼쓰레딩(hyper Threading)
기술이라고 한다.
일반적으로 core가 많아지면 cpu의 클럭이 낮아지게 된다. = 하나의 코어가 처리할 수 있는 프로세스 작업량이 낮아지게 된다. 발열 등의 문제 때문이다.