들어가며
지난 1편에서는 가상 스레드(virtual thread)의 장점을 살펴보고 가상 스레드를 어떻게 생성하고 시작하는지 알아봤습니다. 이어서 이번 글에서는 컨텍스트 스위칭(context switching)의 작동 방식을 살펴보려고 합니다. 1편에서 살펴본 VirtualThread 클래스의 멤버 변수와 가상 스레드 시작 시 수행하는 사전 작업을 어떻게 활용하는지 참고하면서 2편을 읽어보시면 조금 더 쉽게 이해하실 수 있을 것 같습니다.
- 생성과 시작
- 컨텍스트 스위칭
- 고정(pinned) 이슈와 한계
2편은 다음과 같은 순서로 진행합니다.
컨텍스트 스위칭의 작동 방식
가상 스레드가 시작된 후 블로킹 I/O 작업을 만나면 컨텍스트 스위칭이 발생합니다. 이때 해당 가상 스레드는 실행 중이던 캐리어 스레드(carrier thread)와의 매핑이 끊어지며, 이후 블로킹 I/O 작업이 완료됐을 때 다시 캐리어 스레드에서 작업이 재개됩니다. 이 작업은 가상 스레드의 park와 unpark메서드가 수행하는데