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

작성자 없음

작성자 정보가 삭제된 글입니다.

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

동기 vs 비동기 & Blocking vs Non Blocking (2)

안녕하세요 강사님 질문있습니다

작성

·

244

0

강의 정말 잘 듣고있습니다!!
제 프로젝트에서 회원가입API에 회원가입과 메일전송이있고 메일전송을 스프링의 @Async로 처리하고 있는 상황입니다.

1. 만약 CPU가 1대라면 API호출한 스레드와 비동기 스레드가 context switching 발생하면서 처리되는게 맞을까요?

2. 만약 100개의 요청이 회원가입 API에 몰리고 cpu가 1대라면 Async전용 스레드풀의 스레드 개수는 어떻게 될지 짐작이 안갑니다.
일반적인 애플리케이션 스레드풀은 강의해주신대로 스레드풀 사이즈, 큐 사이즈 등에 따라서 그림이 그려지지만.. Async전용 스레드풀도 똑같이 100개의 요청이 한번에 들어와 애플리케이션 스레드풀처럼 동작할까요..?

답변 1

1

정수원님의 프로필 이미지
정수원
지식공유자

1번

사실 context switching 은 비동기, 동기적인 구분으로 나타나는 개념이 아닙니다.

context switching 은 여러 스레드들 중 하나의 스레드가 CPU 할당을 받는 과정에서 발생하는 개념입니다.

그렇기 때문에 회원가입 작업을 진행하는 스레드와 메일작업을 하는 스레드가 동시적으로 작업을 진행할 수 있도록 스케줄러의 제어 하에 컨텍스트 스위칭이 발생하게 됩니다.

그래서 질문하신 내용이 맞긴 합니다만 컨텍스트 스위칭은 CPU 보다 작업하는 스레드 개수가 많을 경우 발생할 수 밖에 없는 동시성의 원리라고 이해하시면 되겠습니다.

2번

Async 전용 스레드 풀을 운용한다면 전용 스레드 풀도 제한된 스레드 개수로 요청을 처리하도록 하면 됩니다.

물론 100 개의 요청에 대해 100 개의 스레드를 만들어서 수행할 수도 있겠지만 CPU 나 메모리 자원은 한정되어 있으므로 적절하게 조절할 필요가 있습니다.

스레드 풀은 기본적으로 작업을 저장하는 큐가 있기 때문에 100 개의 요청에 대해 10개의 스레드가 실행된다면 90개의 작업은 일단 큐에 대기하고 있다가 10개의 스레드가 10개의 작업을 완료하고 나서 큐에 대기하고 있는 작업들을 다시 가져와서 실행하게 됩니다.

이 과정에서 몇개의 스레드를 전용풀에 생성할 것인지를 여러 테스트를 거쳐서 가장 효율적인 스레드 개수를 정하면 됩니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기