Java

Java / 프로세스와 스레드

Dear-J 2025. 5. 11. 20:31

멀티태스킹

CPU가 매우 빠르게 두 프로그램의 코드를 번갈아 수행

>> 두 프로그램이 동시에 실행되는 것처럼 느낌

각 프로그램의 실행 시간을 분할해서 마치 동시에 실행되는 것처럼 하는 기법

>> 시분할(Time Sharing, 시간 공유) 기법

 

하나의 컴퓨터 시스템이 동시에 여러 작업을 수행하는 능력

>> 멀티 태스킹

 

CPU에 어떤 프로그램이 얼마만큼 실행될지는 운영체제가 결정

>> 스케쥴링

 

멀티 프로세싱

컴퓨터 시스템에서 둘 이상의 프로세서(CPU 코어)를 사용해서 여러 작업을 동시에 처리하는 기술

 

프로세스

프로그램을 실행하면 프로세스가 만들어지고 프로그램이 실행됨

>> 운영체제 안에서 실행중인 프로그램을 프로세스 

 

프로세스

>> 실행 중인 프로그램의 인스턴스

>> 서로 격리되어 관리

>> 다른 프로세스에 영향 x

 

프로세스의 메모리 구성

>> 코드 섹션 : 실행할 프로그램의 코드가 저장되는 부분

>> 데이터 섹션 : 전역 변수 및 정적 변수가 저장되는 부분

>> : 동적 할당 메모리 영역

>> 스택 : 메서드 호출 시 생성되는 지역 변수와 반환 주소가 저장되는 영역

 

스레드(Thread)

메모리 구성

>> 공유 메모리 : 같은 프로세스의 코드 섹션, 데이터 섹션, 힙은 프로세스 안의 모든 스레드가 공유

>> 개별 스택 : 각 스레드는 자신의 스택을 가짐

 

프로그램 실행?

>> 운영체제는 먼저 디스크에 있는 파일인 프로그램을 메모리로 불러오면서 프로세스 만듦

>> 프로세스 안에 있는 코드가 한 줄씩 실행되는 것

>> 프로세스의 코드를 실행하는 흐름을 스레드라 함

 

프로세스 내에서 실행되는 작업의 단위

>> 하나의 프로세스 안에는 최소 하나의 스레드 존재

 

컨텍스트 스위칭

멀티스레드인 경우 한 스레드를 실행하다가 다른 스레드를 실행하기 위해 멈추는 시점에

CPU에서 사용하던 값들을 메모리에 저장하고 이후 다시 실행할 때 CPU에 다시 불러와야 함

 

멀티스레드는 대부분 효율적이지만 컨텍스트 스위칭 과정이 필요해서 항상 효율적이진 않음

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

출처 : 김영한, 김영한의 실전 자바 - 고급 1편