Search
Duplicate

[Java]프로세스와 스레드

Created time
2024/02/21 00:16
Last edited time
2024/02/21 03:38
Status
Done
tag

들어가기에 앞서

참고한 자료를 바탕으로 비전문가가 정리한 글이므로 오류가 있을 수 있습니다.
오류에 대한 피드백은 언제든지 환영합니다. 부디 댓글로 알려주시길 바랍니다. 감사합니다.

프로세스와 스레드

프로세스(Process):
프로세스는 운영 체제 상에서 실행 중인 프로그램의 상태입니다.
또는 운영체제로부터 자원을 할당받는 작업의 단위라고 할 수 있습니다.
각 프로세스는 자체 메모리 공간을 가지며, 운영 체제에 의해 독립적으로 관리됩니다.
각 프로세스는 최소한 하나의 스레드를 포함합니다. 자바 프로그램이 실행되면 JVM(Java Virtual Machine)이라는 프로세스가 생성되며, 이 프로세스는 자바 프로그램의 실행을 담당합니다.
스레드(Thread):
스레드는 프로세스 내에서 실행되는 작은 실행 단위입니다.
프로세스가 할당 받은 자원을 사용하는 단위라고 할 수 있습니다.
하나의 프로세스에는 여러 개의 스레드(멀티 스레드)가 존재할 수 있습니다.
스레드를 사용하면 여러 작업을 동시에 수행할 수 있으며, 자원을 효율적으로 활용할 수 있습니다.

자바의 프로세스와 스레드

자바 애플리케이션의 메인 메소드가 실행되면 JVM 프로세스가 시작되고 main thread가 생성됩니다. JVM은 운영 체제에서 할당받은 자원을 이용하여 자바 프로그램을 실행합니다. 이 JVM은 여러 개의 스레드를 생성하여 자바 프로그램의 동시성을 지원하고, 이 스레드들은 JVM의 관리하에 있습니다.
JVM은 프로세스를 실행하면서 OS로부터 Runtime Data Area 메모리를 할당받습니다.

JVM에서의 멀티프로세스와 멀티스레드

멀티프로세스

멀티프로세스는 여러 개의 프로세스를 동시에 실행하여 병렬 처리를 구현하는 방식입니다.
각 프로세스는 운영 체제로부터 독립적인 메모리 공간을 할당받고, 각각의 프로세스는 독립적으로 실행됩니다.
프로세스 간 통신(IPC, Inter-Process Communication)이 필요한 경우에는 별도의 메커니즘이 사용되어야 합니다. 대표적으로 파이프, 소켓, 공유 메모리 등이 있습니다.
장점으로는 안정성이 높고 각 프로세스 간의 독립성이 보장되지만, 프로세스 간 통신에 비용이 발생하고, 메모리 소모량이 많을 수 있습니다.

멀티스레드

멀티스레딩은 단일 프로세스 내에서 여러 개의 스레드를 생성하여 병렬 처리를 구현하는 방식입니다.
모든 스레드는 같은 프로세스 내에서 실행되며, 프로세스의 자원을 공유합니다.
스레드 간 통신은 일반적으로 공유 메모리를 통해 이루어집니다.
장점으로는 프로세스 간 통신에 비해 오버헤드가 적고, 자원을 효율적으로 활용할 수 있으며, 생성 및 제거하는 데 비용이 적습니다. 그러나 스레드 간 동기화와 관련된 문제를 다루어야 하며, 이로 인해 디버깅이 어려울 수 있습니다.
Method area와 heap 영역이 공유되기 때문에 프로그래밍시 동기화 문제가 발생하지 않도록 유의해야 합니다.

참고