프로세스와 스레드는 운영체제(OS, Operating System)에서 배우는 개념이고, 비동기는 CS개념이라기보단 개발하다보면 많이 접하는 개념이다.
프로세스와 스레드는 CPU가 하는 일거리!
- 메모리에 적재되어 실행되고 있는 프로그램의 인스턴스
- 운영체제로부터 시스템 자원을 할당받은 작업의 단위
프로세스 내에서 프로세스의 자원을 이용하는 여러 실행 흐름의 단위
스레드는 프로세스 내의 Code, Data, Heap 영역은 다른 스레드와 공유하고 Stack영역을 따로 할당받음.
프로세스와 해당 프로세스 내의 다른 스레드와 자원과 공간을 공유하면서 사용
하나의 프로그램을 여러개의 프로세스로 구성해 각 프로세스가 하나의 작업을 처리하도록 하는 것
- 장점 : 프로세스에 문제가 생기면 그 프로세스만 죽고 다른곳에 영향확산 X
- 단점 : 문맥교환 에서의 오버헤드, IPC라는 방법을 사용해야 하는데 이는 복잡하고 어려운 통신방법
하나의 프로그램을 여러개의 스레드로 구성해 각 스레드가 하나의 작업을 처리하도록 하는 것
- 장점 : 프로세스에 비해 메모리 공간과 시스템 자원소모가 줄어듬
스레드간 통신시 Data, Heap 메모리 영역을 이용해 데이터를 주고받으므로 통신방법이 간단.- 단점 : 하나의 스레드에 문제생기면 전체 프로세스가 영향받음
서로 다른스레드가 Data, Heap 영역 등을 공유하기 때문에 엉뚱한 정보를 읽어오거나 수정할 수 있다.
예시
기본적으로 멀티 스레드 방식, JVM(Java Virtual Machine)에 의해 스레드 스케줄링이 이뤄짐.
활용 예시 : Request 요청 처리, DB 접근