Context switching
정의 : CPU에서 실행 중이던 프로세스/스레드가 다른 프로세스/스레드로 교체되는 것
위원회 준비를 하다가, 다른부서에 시스템 사용문의 요청이 들어왔으면 위원회 준비를 어디까지 헀는지 적어놨다가 멈추고 나중에 메모를 보면서 머리속에 진행흐름(문맥)을 기억해내고 진행을 해야한다
운영체제의 멀티테스킹도 과정이 같은데, 잠깐 중단하는 스레드 진행 위치와 계산하던 변수의 값(문맥)을 메모리에 저장해놨다가 다시 진행할때 이 값들은 CPU에 불러와야한다. 이런과정을 컨텍스트 스위칭이라고 한다.
컨텍스트 스위치 과정에서 이전에 실행 중인 값을 메모리에 잠깐 저장하고, 이후에 다시 실행하는 시점에 저장한 문맥을 CPU에 다시 불러와야 해서 약간의 비용이 발생한다.
그러므로 멀티스레드는 간혹 효율적이지 않을 때가 있다. 스레드가 많아서 컨텍스트 스위칭이 자주 일어나는 경우 등..
물론, 컨텍스트 스위칭에 걸리는 시간은 매우 짧다. 개념만 알고있자.
□ 스레드 작업의 종류
- CPU-바운드 작업(CPU-bound tasks)
- CPU의 연산 능력을 많이 요구하는 작업을 의미한다
- 계산, 데이터 처리, 알고리즘 실행 등 CPU의 처리 속도가 작업 완료 시간을 결정
- I/O-바운드 작업(I/O-bound tasks)
- 입출력작업이 많이 요구되어, CPU가 유후상태가 있는 경우가 많음
□ I/O-바운드 작업에서 CPU와 스레드
웹 어플리케이션 서버에서는 I/O-바운드 작업이 많다. = 스레드가 CPU를 많이 사용하는 I/O-바운드 작업이 많다.
이런 경우에는 클라이언트 : CPU 를 1대 1로 맞춘다면 유휴상태인 경우가 많아, CPU하나가 다수의 클라이언트를 받는게 효율적이다. = 이 경우 컨텍스트 스위칭을 활용하는게 유리하다
웹 어플리케이션 서버라도 상황에 따라 CPU 바운드 작업이 많을 수 있으니, 적절한 성능 테스트 하여 CPU당 스레드 갯수를 맞추면 된다.
김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성 강의 | 김영한 - 인프런
김영한 | 멀티스레드와 동시성을 기초부터 실무 레벨까지 깊이있게 학습합니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 실전 자바[사진][임베딩 영상]단순히 자바 문법을 안다?
www.inflearn.com
'JAVA' 카테고리의 다른 글
스레드 생성과 실행 - Runnable (0) | 2024.10.23 |
---|---|
스레드 생성과 실행 - 스레드 종류 (0) | 2024.10.23 |
(스레드) Thread와 Scheduling (0) | 2024.10.21 |
프로세스와 스레드 (0) | 2024.10.21 |
(스레드) Multi-Tasking과 Multi-Process (0) | 2024.10.21 |