프로세스는 컴퓨터 프로그램이 실행되는 인스턴스입니다. 각 프로세스는 다음과 같은 리소스를 포함합니다:
프로세스는 무겁습니다. 즉, 생성하고 삭제하는 데 비용이 많이 듭니다.
스레드는 프로세스의 일부로, 실행 단위를 의미합니다. 하나의 프로세스는 여러 개의 스레드를 가질 수 있으며, 이 스레드들은 메모리를 공유합니다.
운영체제(OS)는 스케줄러를 통해 스레드를 CPU에 할당합니다. 만약 하나의 CPU만 있다면, 스케줄러는 여러 스레드 간에 CPU 사용 시간을 나누어줍니다. 이를 컨텍스트 스위치라고 합니다.
Java 스레드는 OS 스레드를 감싸는 래퍼입니다. Java 스레드는 OS 스레드와 동일하게 스케줄링되고 실행됩니다. 스레드가 실행할 메소드와 로컬 변수 등의 정보는 스택 메모리에 저장됩니다.
스레드는 CPU와 메모리를 많이 소비합니다. 특히, 네트워크 호출처럼 시간이 많이 걸리는 작업은 스레드가 유휴 상태가 되어 CPU 자원을 낭비하게 됩니다. 이를 해결하기 위해 더 효율적인 메커니즘이 필요합니다.
프로세스와 스레드는 컴퓨터 프로그램의 실행과 관련된 중요한 개념입니다. 프로세스는 독립적인 메모리 공간을 가진 자원의 단위이고, 스레드는 그 프로세스 내에서 실행되는 단위입니다. OS 스케줄러는 이들 스레드를 효율적으로 관리하여 CPU 자원을 최대한 활용하도록 돕습니다.