인프런 커뮤니티 질문&답변

창현님의 프로필 이미지
창현

작성한 질문수

자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]

Context Switch

Thread의 Context Switching 문의드립니다.

작성

·

113

·

수정됨

0

Context Switch 강의에서 예제로 3개의 Thread를 생성해서 실행하는데, 이게 Context Swtiching에 의한 예로 볼 수 있다고 해주셨습니다.

근데 이전에 ThreadPoolExecutor를 이용할 경우 여러 개의 코어 프로세스를 이용하여 Thread를 병렬성 + 동시성 실행시킬 수 있었는데, 해당하는 예제에서는 하나의 코어에서 3개의 Thread를 실행시켜서 컨텍스트 스위칭이 일어나는 것으로 보아도 괜찮은걸까요?

만약 예제 코드가 ThreadPoolExecutor처럼 3개의 코어가 있을 때 3개의 스레드가 개별적으로 동작한다면 컨텍스트 스위칭이 일어나지 않는다라고 볼 수 있을 것 같아서요!

기본적으로 SpringBoot를 이용하여 Tomcat 서버로 구동이될 때, 요청마다 생성되는 쓰레드는 여러 개의 코어에 분배되어 처리되는 것일까요?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

창현님의 질문에 가장 잘 부합하는 내용은 ”[스레드 중지 – flag variable vs interrupt() - 2] 강의 Context Switch 관련 질문있습니다.”에서 찾을 수 있습니다. 이 질문과 답변에서는 Thread.sleep(1)을 통해 컨텍스트 스위칭을 강제하는 방법과 이에 따른 정상 종료에 대해 설명하고 있습니다.

창현님께서 언급하신 ThreadPoolExecutor를 이용한 경우, 여러 코어에서 Thread를 실행시킬 때 컨텍스트 스위칭의 발생 여부와 병렬성/동시성 실행에 대한 처리는 스레드가 어떻게 스케줄링되고 CPU 코어에 할당되는지에 대한 OS의 스케줄러와 JVM의 작업 처리 방식에 따라 달라집니다.

스레드 중지 – flag variable vs interrupt() - 2 강의 Context Switch 관련 질문있습니다.에 대한 답변에서 정수원 강사님은 스레드가 계속 CPU를 점유할 수 있는 상황과 컨텍스트 스위칭이 일어나지 않는 경우에 대해 설명하고 계십니다. 이 설명은 창현님의 질문에 대한 답에서도 중요한 인사이트를 제공할 수 있습니다.

특히, “굳이 Thread.sleep(1)을 하지 않아도 우리 컴퓨터에는 이미 무수히 많은 프로세스와 스레드가 존재하기 때문에, 언젠가는 Java의 Thread도 Context Switch가 일어나지 않나요?”와 같은 질문에 대한 답변에서 컨텍스트 스위칭 발생의 기본 원리와 그 상황에 따른 영향을 확인할 수 있습니다.

어플리케이션이 Tomcat 서버에서 구동될 때 각 요청마다 생성되는 쓰레드가 여러 개의 코어에 분배되어 처리되는지의 여부도 OS와 JVM, 그리고 구성된 서버 설정(스레드 풀 설정 등)에 따라 달라집니다. 여러 코어에서 동시에 스레드가 실행되는 환경을 제공할 수 있지만, 실제 스레드의 실행과 관리는 스레드 스케줄링 정책과 해당 환경의 복잡한 상호작용에 의해 결정됩니다.

클라이언트의 요청을 처리하는 Tomcat과 같은 서블릿 컨테이너에서는 일반적으로 요청마다 쓰레드를 할당하여 병렬로 처리하며, 실제 쓰레드가 어떻게 코어에 할당되고 실행되는지는 JVM과 OS의 스케줄러에 의해 결정됩니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

창현님의 프로필 이미지
창현

작성한 질문수

질문하기