inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

동시성 처리 관련 스레드 풀 설정 질문

317

오세창

작성한 질문수 8

1

@Test
@DisplayName("쿠폰 여러 명 발급")
void 쿠폰_여러_명_발급() throws InterruptedException {
    int threadCount = 1000;
    ExecutorService executorService = Executors.newFixedThreadPool(32);
    CountDownLatch latch = new CountDownLatch(threadCount);

    for (int i = 0; i < threadCount; i++) {
        final int threadNumber = i + 1;
        Integer key = i;
        executorService.submit(() -> {
            try {
                couponService.issueCoupon(param, usersMap.get(key));
            } catch (PessimisticLockingFailureException e) {
   ....
}

쿠폰 발급 동시성 처리 관련해서 테스트 코드 작성 간 궁금한 점이 있어서 질문을 올립니다.

 

구글링해서 작성해봤는데, 제가 이해하는 게 맞나 싶어서요...

 

Executors.newFixedThreadPool(32)

 

이렇게 설정해주면, 32 개의 고정된 스레드 풀을 생성한다는 것이고

 

1,000 명의 유저가 해당 스레드 풀이 나눠서 작업이 수행된다는 것인가요 ?

 

그러니까 하나의 스레드에서 약 31명의 유저를 담당한다는 뜻일까요 ?

 

아니면 순차적으로 1,000 명의 유저를 하나의 스레드에 한 명씩 배치하여 작업하는 것이고,

 

실질적으로 한 순간에 32명의 유저만 작업한다는 뜻일까요 ? ㅠㅠㅠ

java spring 멀티스레딩 동시성제어 동시성

답변 1

2

인프런 AI 인턴

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

Executors.newFixedThreadPool(32)를 사용하여 설정해주면, 말씀하신 것처럼 32개의 스레드 풀을 생성합니다. 이것은 동시에 최대 32개의 스레드가 작업을 수행할 수 있다는 의미입니다. 따라서 1,000 명의 유저 작업이 이 스레드 풀에 제출되면, 한 번에 최대 32개의 작업이 병렬로 실행될 수 있습니다. 나머지 작업들은 스레드 풀의 작업 큐에서 대기 상태로 있게 됩니다. 그리고 실행 중인 스레드가 작업을 완료하면, 대기 중인 작업 중 하나가 새로 실행되는 방식입니다.

즉, 한 순간에 작업을 수행할 수 있는 유저는 최대 32명이며, 각 스레드는 순차적으로 1,000명의 유저 작업을 처리하지만 동시에 처리되는 작업 수는 고정 스레드 풀 크기(여기서는 32개)에 의해 결정됩니다.

모코코님의 이해가 맞으시며, 마지막 설명이 실제 작업 처리 방식과 일치합니다. 한 스레드에서 31명의 유저를 담당한다기보다는, 동시에 최대 32개의 작업이 실행되고, 실행이 완료된 스레드는 새로운 작업을 수행하는 방식입니다.

1

오세창

혹시 그러면 해당 스레드풀의 크기를 정하는 기준이 있을까요 ?
서비스 규모와 요구사항에 따라 판단 기준은 갈리겠지만, 보통 몇 개의 스레드풀이 운영되는지 궁금합니다.

여러 파드 환경에서 단일 실행 보장 방식

0

8

2

XAMPP에서 Apache, DB 재기동 시 접속안되는 문제

0

8

1

실습 권한이 없네요··· 이건 ··· 좀··· 401 에러떠요

0

16

1

inheritance startegy 선택시 고려사항

0

13

1

[할인쿠폰] 코테의 바이블[JAVA] 50% 할인 쿠폰 관련

0

17

1

Entity 동등성 비교

0

16

1

패키지 구분에 대해 궁금한게 있습니다

0

20

2

안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.

0

21

1

갑자기 채점 사이트가 바뀌었어요

0

29

1

코드 자료

0

40

2

문제 리스트 페이지

0

25

1

part8 Notion 링크

0

28

1

채점 사이트 관련 질문드립니다

0

23

1

인텔리제이 MCP 서버 설정 관련

0

34

2

조회속도 개선에서 더 개선하는 방법이 궁금합니다.

0

34

2

필기자료 사라졌나요?(실기 일주일만에 안돼서 재도전-_-)

0

42

2

servlet과 container에 대한 질문입니다

0

26

1

질문있습니다

0

28

1

1번 문제 질문입니다.

0

33

1

26년 1회 실기 해설 강의

0

59

2

음악플레이어 문제 중 코드질문

0

27

1

잠겨버린 사물함 시간초과 관련 질문입니다.

0

28

1

RepositoryTest의 패키지 위치가 domain인 이유

0

32

2

도메인 모델에서 관계와 규칙을 구분하는 방법

0

43

2