- 프로세스 : 운영체제로 부터 자원을 할당받는 작업의 단위
- 쓰레드 : 프로세스가 할당받은 자원을 이용하는 실행의 단위
쓰레드는 프로세스 내에서 일하는 일꾼(코드 실행의 흐름)이다.
프로세스가 작업 중인 프로그램에서 실행 요청이 들어오면 Thread를 만들어 명령을 처리하도록 한다.
프로세스 내부에는 여러 thread가 존재한다.
Thread는 실행을 위해 프로세스의 주소공간이나 메모리 공간을 공유 받는다.
JVM 프로세스 위에서 실행되는 Thread.
자바는 메인 쓰레드가 main() 메서드를 실행 시키면서 작업이 시작된다.
- 메인 쓰레드는 필요에 따라 여러 작업 쓰레드를 생성시켜 코드를 병렬로 실행시킬 수 있다.
프로세스 내부에서 하나의 쓰레드만 실행되는 것을 말한다.
Java에서 main() 하나만 실행시켰을 경우 single thread다.
Java의 JVM이 종료되는 시점이 JVM의 메인 쓰레드가 종료되는 시점과 같다.
Single이 프로세스 내부에서 하나였으니, Multi는 프로세스 안에 2개 이상의 쓰레드가 존재 한다.
하나의 프로세스가 여러 개의 thread를 가질 수 있으며 이 thread 들은 프로세스의 자원을 공유한다.
Java는 메인 thread 외에 다른 작업 thread를 만들어 여러 개의 실행 흐름을 만들 수 있다.
- 여러개의 thread를 통해 작업을 동시에 할 수 있어서 성능이 향상된다.
- 스택을 제외한 모든 영역에서 메모리를 공유하기 때문에 자원을 효율적으로 사용할 수 있다.
- 응답thread 와 작업thread 를 분리하여 빠르게 응답이 가능하다.
-> 다른 프로그래밍 언어에서도 사용하는 비동기 처리를 말한다. (iOS 할 때 고생 많이헀지...)
- 프로세스의 자원을 공유하면서 작업을 처리하기 때문에 자원을 서로 사용하려고 하면서 발생하는 문제 -> 동기화 오류
- 둘 이상의 쓰레드가 프로세스의 자원을 공유하기 때문에 둘 이상의 쓰레드가 서로의 자원을 원하게 되는 경우가 발생 -> 서로의 작업이 종료되기를 기다림 => 교착 상태
내일은 쓰레드의 사용법과 상태제어!