멀티태스킹
하나의 컴퓨터 시스템이 동시에 여러작업을 수행하는 능력
소프트웨어적 관점
( 무지하게 빠른 CPU를 잘 활용해보자는 )
CPU가 빠르게 여러가지 프로그램의 코드를 번갈아가며 실행하여, 동시에 실행되는 것 처럼!
멀티프로세싱
둘 이상의 프로세서(CPU 코어)를 사용하여 동시에 여러 작업을 동시에 처리하는 기술
하드웨어적 관점
( 코어의 갯수가 여러가지 )
코어의 갯수만큼은 동시에 프로그램을 실행할 수 있는 것!
프로세스
실행중인 프로그램
프로그램이 클래스라면, 프로세스는 인스턴스
프로세스별 독립적인 공간 보유
코드섹션, 데이터 섹션, 힙, 스택으로 구분
( 스택은 스레드별로 주어지고, 나머지는 프로세스별로 주어진다! )
스레드를 실행하기 위한 컨테이너의 느낌으로 생각하면 된다
스레드
프로세스 내에서 반드시 하나 이상 존재
프로세스의 코드를 실행하는 흐름
실질적으로 프로그램 실행 시 프로세스안에 있는 스레드가 CPU의 자원을 활용하여 일을 한다!
스레드별 각자의 스택영역을 가지고 있고, 나머지 영역은 프로세스안에서 스레드들끼리 공유
한 프로세스 내 하나의 스레드 - 단일스레드
한 프로세스 내 여러 스레드 - 멀티스레드
멀티스레드 필요성 - 유튜브 영상보면서 댓글기능 - 영상 스레드, 댓글 스레드
스케줄링
CPU의 시간을 여러 작업에 나누어 분배하는 방법
( 어떤 프로그램이 얼마만큼 실행되는지 )
CPU를 최대한 활용할 수 있는 다양한 기법이 존재
( 필요하면 더 공부할 수 있도록 )
컨텍스트 스위칭
"문맥을 전환한다." 라는 뜻을 가짐
운영체제에서는, 한 스레드 실행 중 스케줄링에 의해 다른 스레드가 실행될때, 스레드 간 전환 과정
스레드가 전환하면서, 기존 데이터를 저장하고 새로운 작업을 하도록 하는 작업
비용이 발생한다
( 매우 빠르지만 비용이 발생한다는 점 )
대부분 효율적, 그러나 별거 아닌 기능에 너무 많은 전환이 들어가면 비효율적
스레드 실무
웹 어플리케이션 서버의 경우, I/O Bound가 자주 발생한다.
그 말은, CPU가 노는 경우가 많이 발생할 수 있다는 것.
이를 위해서, CPU 코어와 스레드 갯수를 맞추지 않고 스레드 갯수를 늘려 I/O 작업 시 스레드는 다른 작업을 진행한다
( 효율성 증가 )
실무에서는 성능 테스트를 통해서, 최적의 스레드 갯수를 찾아야 한다!
'Java > 김영한의 실전자바' 카테고리의 다른 글
스레드 제어 (0) | 2024.08.22 |
---|---|
스레드의 생성과 실행 (0) | 2024.08.15 |
[김영한의 실전 자바 - 기본편] 기본형과 참조형 (0) | 2024.01.21 |
[김영한의 실전 자바 - 기본편] 클래스 (0) | 2024.01.13 |
[김영한의 실전 자바 - 기본편] 수강 후기 (1) | 2024.01.10 |