프로세스와 스레드, 멀티스레드
프로세스(process)란?
프로세스(process)란 단순히 실행 중인 프로그램(program)이라고 할 수 있습니다.
즉, 사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 실행 중인 것을 말합니다.
이러한 프로세스는 프로그램에 사용되는 데이터와 메모리 등의 자원 그리고 스레드로 구성됩니다.
> 간단히 말해서 '실행 중인 프로그램'이다.
스레드(thread)란?
스레드(thread)란 프로세스(process) 내에서 실제로 작업을 수행하는 주체를 의미합니다.
모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행합니다.
또한, 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(multi-threaded process)라고 합니다.
> 프로세스의 자원을 이용해서 실제로 작업하는 것이 '스레드'다.
즉, 프로세스는 껍데기일뿐이고 실제 작업은 스레드에서 이루어진다.
멀티스레드란?
하나의 프로그램에 동시에 여러개의 일을 수행할수 있도록 해주는 것이다.
멀티스레드를 사용하는 이유
싱글스레드로 서버 프로그램을 작성한다면 사용자의 요청마다 새로운 프로세스를 생성해야하는데 프로세스를 생성하는 것은 쓰레드를 생성하는 것에 비해 더 많은 시간과 메모리 공간이 필요하기 때문에 많은 수의 사용자 요청을 서비스하기 어렵다.
멀티스레딩의 장점
-CPU의 사용률을 향상시킨다.
-자원을 보다 효율적으로 사용할 수 있다.
-사용자에 대한 응답성이 향상된다.
-작업이 분리되어 코드가 간결해진다.
멀티스레딩의 단점
멀티스레드 프로세스는 여러 스레드가 같은 프로세스 내에서 자원을 공유하면 작업하기 때문에 발생할 수 있는 동기화, 교착상태와 같은 문제들을 고려해서 신중히 프로그래밍해야 한다.
*교착상태란 두 스레드가 자원을 점유한 상태에서 서로 상대편이 점유한 자원을 사용하려고 기다리느라 진행이 멈춰 있는 상태를 말한다.
멀티스레딩 예시
메신저로 채팅하면서 파일을 다운로드 받거나 음성대화를 나눌 수 있다.
참고:
http://tcpschool.com/java/java_thread_concept
https://goodgid.github.io/What-is-Multi-Thread/
서적:
자바의 정석 - 남궁성