오늘의하루

JAVA의 컨텍스트 스위칭이 비싼 이유? 본문

JAVA

JAVA의 컨텍스트 스위칭이 비싼 이유?

오늘의하루_master 2025. 1. 10. 10:40
반응형

공부를 하다 보면 "Java의 컨텍스트 스위칭 비용이 비싸다"라는 말을 자주 듣곤 하는데 이번 글에서는 왜 Java의 컨텍스트 스위칭 비용이 비싼지 정리해보았습니다.

JAVA의 Thread 구조

Java에서는 java.lang.Thread를 통해 스레드를 생성하게 되는데 이 과정에서 JVM은 플랫폼 스레드를 만들고 이를 OS 스레드와 연결되고 이 OS 스레드는 다시 커널 스레드와 연결됩니다.

즉, Java에서는 스레드가 JVM 플랫폼 스레드 → OS 스레드 → 커널 스레드의 1:1:1 관계로 동작합니다.

- JVM 스레드 : 크기가 작음
- OS 스레드 : JVM 스레드에 비해 훨씬 큼

Context Switching

컨텍스트 스위칭은 실행 중인 스레드를 변경할 때 현재 스레드의 상태(레지스터, 스택 포인터, 메모리 등)를 저장하고 다른 스레드의 상태를 복원하는 작업을 의미합니다.

이 과정에서 저장 및 복원해야 할 정보(크기)가 많을수록 비용이 높아집니다.

 

Java의 경우 OS 스케줄러에 의해 컨텍스트 스위칭이 이루어지며 상대적으로 큰 OS 스레드 전체를 교체해야 합니다.

따라서 Java의 컨텍스트 스위칭 비용은 상당히 높습니다.


GO는 왜 Context Switching 비용이 싸다는거지?

Go에서는 고루틴이 OS 스레드와 연결된 경량화된 작은 스레드로 동작하며 이 OS 스레드는 다시 커널 스레드와 연결되는데 이 구조만 보면 Java와 비슷하게 1:1:1 관계처럼 보입니다.

하지만 Go의 큰 차이점은 OS 스케줄러가 아닌 Go 런타임에서 컨텍스트 스위칭을 관리한다는 점입니다.

즉 Go는 많은 경량화된 스레드를 생성하고 이 경량화된 스레드 자체를 변경합니다.

경량화된 스레드는 OS 스레드보다 훨씬 작기 때문에 저장 및 복원해야 할 정보가 적어 컨텍스트 스위칭 비용이 Java에 비해 훨씬 낮습니다.

 

반응형
Comments