이번 글에서는 쓰레드를 학습하기 전에 프로세스에 대해서 간단하게 알아보도록 하겠습니다.
프로세스 (Process)
실행 중인 프로그램을 의미합니다.
프로그램을 실행하면 OS(운영체제)로부터 실행에 필요한 자원을 할당받아 프로세스가 됩니다.
프로세스는 프로그램을 수행하는 데 필요한 데이터, 메모리 등의 자원과 쓰레드로 구성되어 있습니다.
쓰레드 (Thread)
프로세스의 자원을 이용해서 실제로 작업을 수행하는 주체입니다.
따라서 모든 프로세스에는 최소한 하나 이상의 쓰레드가 존재합니다.
하나의 쓰레드를 가진 프로세스를 싱글쓰레드 프로세스(Single-Threaded Process),
두 개 이상의 쓰레드를 가진 프로세스를 멀티쓰레드 프로세스(Multi-Threaded Process) 라고 합니다.
멀티태스킹
여러 개의 프로세스를 동시에 실행하는 것을 의미합니다.
현재 우리가 사용하는 대부분의 OS에서 멀티태스킹을 지원합니다.
멀티쓰레딩
하나의 프로세스 내에서 여러 쓰레드가 동시에 작업을 수행하는 것을 의미합니다.
CPU의 코어는 한 번에 하나의 작업만 수행할 수 있습니다.
즉 실제로 동시에 처리되는 작업의 수는 CPU의 코어의 개수와 일치합니다.
그러나 쓰레드의 수는 코어의 수보다 언제나 많습니다.
따라서 CPU의 코어는 아주 짧은 시간 동안 여러 작업을 번갈아가며 수행함으로써 여러개의 작업들이 동시에 수행되는 것 처럼 보이게 합니다.
이러한 이유로 프로세스의 성능이 단순히 쓰레드의 개수에 비례하는 것이 아닙니다.
하나의 쓰레드를 가진 프로세스보다 두개의 쓰레드를 가진 프로세스의 성능이 오히려 더 낮을 수 있습니다.
멀티쓰레딩의 장점
- CPU의 사용율이 향상됩니다.
- 자원을 효율적으로 사용할 수 있습니다.
멀티쓰레딩의 단점
여러 쓰레드가 같은 프로세스 내에서 자원을 공유하며 작업을 수행하므로 동기화(synchronization), 교착상태(deadlock)과 같은 문제들이 발생합니다.
'☕️ Java > 기본' 카테고리의 다른 글
[Java] Thread (3) - 싱글쓰레드와 멀티쓰레드 (0) | 2022.07.09 |
---|---|
[Java] Thread (2) - 쓰레드 구현과 실행 (0) | 2022.07.09 |
[Java] Double Dispatch란? (feat. Visitor Pattern) (0) | 2022.07.08 |
[Java] Method Dispatch란? (Static, Dynamic) (0) | 2022.07.08 |
[Java] 리플렉션을 활용한 백준 자동 README 생성기 (0) | 2022.02.07 |