작성
·
172
·
수정됨
0
corePoolSize & maximumPoolSize - 기본 스레드 & 최대 스레드 22분 35초 정도 듣고 있는데 궁금한게 있습니다.
ArrayBlockingQueue에 4개의 태스크가 모두 차면
큐에 적재되지 못한 나머지 태스크는 어디서 대기 하나요?
(핸들러가 없다는 가정하에) 그리고 max thread 까지 생성되면 큐에 적재되지 못한 나머지 태스크들을 max thread개수 만큼 처리하고 이후 찐으로 초과된 태스크는 처리하지 못해 Exception이 발생하나요?
뭔가 제가 이해를 잘 못하고 있는 것 같은데
corePoolSize와 Queue 의 사이즈를 왜 더해서 태스크 개수와 비교하는지 이해를 못하겠어요. 태스크가 큐에 모두 채워지면 나머지 태스크 중 전체 쓰레드 개수 까지는 큐에 적재되지 못해도 처리가 된다로 이해 하면 될까요?
아니면 원랜 큐가 다 차면 Exception이 발생하는데 해당 시간대의 예제에선 defaultHandler 가 뭔가 태스크가 모두 차도 쓰레드 개수만큼은 추가로 처리 할 수 있도록 뭔가 처리를 한 걸까요?
--> 뒤에 더 보니 worker에서 바로 처리 하는 군요;;
추가로
큐에서 태스크가 처리되면 다시 공간이 생길 것 같은데 왜 모두 차는지 이해가 잘 안되요. (제가 뭔가 잘못 알고 있는 걸까요)
강의 너무 좋습니다. 이후 강의도 빨리 내주세요 ㅠ_ㅜ
답변 2
0
아래 AI 인턴 답변이 정확한 의미라 볼 수 있습니다. 요약하면 다음과 같습니다.
태스크가 제출될 때, corePoolSize
까지는 스레드가 생성되어 작업이 실행
만약 모든 코어 스레드가 작업중이면 추가 작업은 큐에 배치
큐가 가득 차면, 시스템은 maximumPoolSize
에 도달할 때까지 추가 스레드를 생성
큐가 가득 차고 추가 스레드가 maximumPoolSize
에 도달했을 때 어떤 방식으로 처리할지는 핸들러 정책에 의해 결정
으로 진행됩니다.
강의에도 자세하게 설명하고 있습니다.
0
안녕하세요, 인프런 AI 인턴입니다.
ArrayBlockingQueue
에 4개의 태스크가 차 있을 경우, 이 큐에 더 이상 태스크가 적재되지 못하고 해당 큐는 가득 찬 상태입니다. 이 경우 추가로 생성되는 태스크들은 corePoolSize
가 설정된 기본 스레드 수를 초과하지 않는 한 기존 스레드에서 처리되거나, 설정된 maximumPoolSize
까지 새로운 스레드가 생성되어 처리됩니다. 새로운 태스크가 대기하는 위치는 스레드 풀의 내부적인 관리에 따라 다를 수 있으며, 구체적으로 ThreadPoolExecutor
에 의해 관리됩니다.
최대 스레드 개수(maximumPoolSize
)까지 생성된 이후에도 그 이상의 태스크가 들어올 경우, 태스크를 어떻게 처리할지 결정하는 정책(RejectedExecutionHandler
)에 따라 다릅니다. 핸들러가 설정되지 않았다면 기본적으로 제공되는 핸들러는 AbortPolicy
로, 이는 새로운 태스크가 도착하면 처리 할 수 없음을 알리는 RejectedExecutionException
을 던집니다. 하지만, 다른 처리 방식을 정의하는 핸들러(CallerRunsPolicy
, DiscardPolicy
, DiscardOldestPolicy
등)를 설정할 수도 있으며, 이 경우 어떻게 처리될지는 설정된 핸들러에 따라 다릅니다.
태스크를 스레드 풀에 제출할 때, 큐와 corePoolSize
, maximumPoolSize
의 관계를 이해하는 것이 중요합니다. 태스크가 제출될 때, corePoolSize
까지는 스레드가 생성되어 작업이 실행됩니다. 만약 모든 코어 스레드가 바쁘다면, 작업은 큐에 배치됩니다. 큐가 가득 차면, 시스템은 maximumPoolSize
에 도달할 때까지 추가 스레드를 생성할 수 있습니다. 큐가 가득 차고 추가 스레드가 maximumPoolSize
에 도달했을 때 어떤 방식으로 처리할지는 앞서 설명한 바와 같이 정책에 의해 결정됩니다.
큐에서 태스크가 처리되어 공간이 생기는 것은 맞습니다. 태스크 처리 속도와 제출 속도에 따라 큐가 가득 차거나 비어 있게 됩니다. 시스템의 성능과 요구에 맞게 큐의 크기와 스레드풀의 크기를 조정하여 최적의 성능을 얻을 수 있도록 해야 합니다.
강의가 유익했다니 기쁩니다. 질문에 답변이 도움이 되었기를 바랍니다.