Java/김영한의 실전자바

프로세스와 스레드

슈코 2024. 8. 13. 19:41

멀티태스킹

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

소프트웨어적 관점

( 무지하게 빠른 CPU를 잘 활용해보자는 )

CPU가 빠르게 여러가지 프로그램의 코드를 번갈아가며 실행하여, 동시에 실행되는 것 처럼!

 

멀티프로세싱

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

하드웨어적 관점

( 코어의 갯수가 여러가지 )

코어의 갯수만큼은 동시에 프로그램을 실행할 수 있는 것!

 

프로세스

실행중인 프로그램

프로그램이 클래스라면, 프로세스는 인스턴스

프로세스별 독립적인 공간 보유

코드섹션, 데이터 섹션, 힙, 스택으로 구분

( 스택은 스레드별로 주어지고, 나머지는 프로세스별로 주어진다! )

스레드를 실행하기 위한 컨테이너의 느낌으로 생각하면 된다

 

스레드

프로세스 내에서 반드시 하나 이상 존재

프로세스의 코드를 실행하는 흐름

실질적으로 프로그램 실행 시 프로세스안에 있는 스레드가 CPU의 자원을 활용하여 일을 한다!

스레드별 각자의 스택영역을 가지고 있고, 나머지 영역은 프로세스안에서 스레드들끼리 공유

한 프로세스 내 하나의 스레드 - 단일스레드

한 프로세스 내 여러 스레드 - 멀티스레드

멀티스레드 필요성 - 유튜브 영상보면서 댓글기능 - 영상 스레드, 댓글 스레드

 

스케줄링

CPU의 시간을 여러 작업에 나누어 분배하는 방법

( 어떤 프로그램이 얼마만큼 실행되는지 )

CPU를 최대한 활용할 수 있는 다양한 기법이 존재

( 필요하면 더 공부할 수 있도록 )

 

 

컨텍스트 스위칭

"문맥을 전환한다." 라는 뜻을 가짐

운영체제에서는, 한 스레드 실행 중 스케줄링에 의해 다른 스레드가 실행될때, 스레드 간 전환 과정

스레드가 전환하면서, 기존 데이터를 저장하고 새로운 작업을 하도록 하는 작업

비용이 발생한다

( 매우 빠르지만 비용이 발생한다는 점 )

대부분 효율적, 그러나 별거 아닌 기능에 너무 많은 전환이 들어가면 비효율적

 

스레드 실무

웹 어플리케이션 서버의 경우, I/O Bound가 자주 발생한다.

그 말은, CPU가 노는 경우가 많이 발생할 수 있다는 것.

이를 위해서, CPU 코어와 스레드 갯수를 맞추지 않고 스레드 갯수를 늘려 I/O 작업 시 스레드는 다른 작업을 진행한다

( 효율성 증가 )

실무에서는 성능 테스트를 통해서, 최적의 스레드 갯수를 찾아야 한다!