13-1. 프로세스와 쓰레드

Hyun Jun·2022년 2월 7일
0

자바의 정석

목록 보기
44/52
post-thumbnail
post-custom-banner

프로세스와 쓰레드

컴퓨터에서 프로그램을 실행하면 프로그램은 OS로부터 실행에 필요한 메모리를 할당받아 프로세스(process)가 됨.

프로세스가 가진 자원(데이터, 메모리 등)을 활용해 실제로 작업을 수행하는 것이 쓰레드(thread)

 

모든 프로세스에는 1개 이상의 쓰레드가 존재

2개 이상의 쓰레드를 가진 프로세스를 멀티 쓰레드 프로세스(multi-threaded process)라고 부름.

 

프로세스가 점유하고 있는 메모리 안에서 각 쓰레드에게 개별 메모리 공간(호출 스택)을 주기 때문에,

프로세스의 메모리 한도 내에서는 쓰레드의 개수 제한은 없음.

 

멀티 태스킹과 멀티 쓰레딩

WindowsUnix, Linux 등 현대 OS는 한번에 여러 개의 프로세스를 동시에 실행할 수 있음. 이를 멀티 태스킹이라고 함.

하나의 프로세스가 여러 가지 작업을 여러 개의 쓰레드(실행 흐름)로 나누어 동시에 처리하는 것을 멀티 쓰레딩이라고 함.

💡 정말로 "동시에" 처리할까?

CPU에게 있어서 작업의 최소 단위는 쓰레드. (OS의 작업 최소 단위는 프로세스)

CPU의 코어는 한 번에 한 가지 일만 수행할 수 있으므로 한 시점에 처리되고 있는 쓰레드의 최대 개수는 코어의 개수와 일치함.

그러나 실제 처리할 쓰레드의 개수는 코어의 개수보다 훨씬 많기 때문에 코어는 아주 짧은 시간 동안 여러 가지 작업들을 번갈아가며 수행하고, 우리 눈에는 수많은 작업들이 동시에 처리되는 것처럼 보임.

 

멀티 쓰레딩의 장단점

장점

  1. CPU의 사용률 향상

  2. 자원의 공유를 통한 효율적 자원 활용

  3. 사용자에 대한 응답성 향상

  4. 작업의 분리로 인한 코드의 간결화

여러 사용자의 요청에 대응해야하는 서버 프로그램의 경우, 멀티 쓰레딩이 가능하게 코드를 작성해서 각 쓰레드가 사용자의 요청을 1대1로 처리하게끔 해야함.

싱글 쓰레드인 경우에는 사용자의 요청마다 새 프로세스를 생성해야 하는데, 프로세스를 생성하는데에 드는 시간과 메모리가 쓰레드를 생성하는 것에 비해 훨씬 크기 때문에 비효율적.

 

단점

단점은 다수의 쓰레드 간의 자원 공유로 인해 동기화(synchronization)나 교착 상태(dead lock) 같은 이슈를 손봐줘야 한다는 것.

profile
Back-end Engineer 👨‍💻
post-custom-banner

0개의 댓글