자바의 정석 으로 공부한 내용입니다.
프로세스(Process)
쓰레드와 프로세스의 차이를 이해하기 위해 우선 프로세스에 대해 알 필요가 있다.
프로세스 = OS로부터 메모리를 할당 받은 “실행 중인 프로그램”
컴퓨터의 작업관리자
를 실행하여 확인하곤 하는 프로세스가 여기서 이야기 하는 프로세스. 😎
말 그대로
- 프로세스는 데이터, 메모리 등 실행에 필요한 자원 + 쓰레드로 이루어져 있다.
- 프로세스는 반드시 하나 이상의 쓰레드를 가진다.
- 프로세스 = 공장, 쓰레드 = 일꾼
- 프로세스의 성능이 쓰레드의 개수에 비례하지는 않는다. (공장은 수용할 수 있는 일꾼이 정해져 있기 때문에)
쓰레드(Thread)
- 쓰레드는 프로세스 내에서 일이 처리되는 흐름 을 이야기 한다.
- 쓰레드는 프로세스에 비해 생성시 시간과 메모리 공간이 적게 필요하다.
- 따라서 쓰레드를 ‘경량 프로세스(LWP, Light-Weight Process)’라고도 한다.
멀티 태스킹 vs 멀티 쓰레드
멀티 태스킹: 하나의 OS 안에 여러 개의 프로세스가 동시에 실행 되는 것
멀티 쓰레드: 하나의 프로세스 안에 여러개의 쓰레드가 동시에 실행 되는 것
실제로는 cpu가 여러 작업을 빠르게 번갈아 수행하며 동시에 실행 되는 것같은 효과를 낸다.
멀티 쓰레드
- 쓰레드를 여러개 만드는 것은 일을 빨리 하려고 만드는 것이 아니라, 자원을 ‘효율’적으로 사용하고, UI/UX를 향상시키기 위해 만든다.
- 여러 사용자에게 서비스하는 프로그램의 경우 멀티 쓰레드가 필수. ex) 메신저 채팅 프로그램
- 위의 경우
사용자 : 쓰레드 = 1 : 1 로 만든다.
[멀티 쓰레드의 단점]
- 동기화, Synchronization
- 교착상태, deadlock :
두 쓰레드가 서로 상대편이 점유한 자원을 사용하려고 대기하느라 진행이 멈춘 상태.
➔ 여러개의 쓰레드가 하나의 자원을 공유하면서 생기는 문제