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

hoonseung님의 프로필 이미지
hoonseung

작성한 질문수

스프링 배치

Multi-threaded Step

step-in-muti-thread 질문

작성

·

38

·

수정됨

0

안녕하세요 강의에서 학습하고 디버깅한 바탕으로 제 생각이 맞는지 궁금하여 질문 드립니다.

 

1. 4개의 스레드 풀이 존재하고 chunkSize=100, pageSize=300을 주었다고 쳤을 때 맨 처음 스레드가 데이터 베이스에서 300개를 조회

2. AbstractPagingItemReader의 CopyOnWriteArrayList에 저장하고 이후 다른 스레드들은 해당 Reader를 공유하여 락 메커니즘이 적용된 doRead() 호출하여 list(count++)에서 데이터를 하나씩 가져와 개별 스택 안의 Chunk에 설정한 chunkSize 만큼 저장

3. 그 후 process -> write 이렇게 작동하여 단일 스레드가 100개씩 3번 처리를 멀티 스레드를 이용해 마치 한 번 만에 300개 처리가 가능하여 속도를 향상시키는 게 맞을까요?

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.
hoonseung님께서 말씀하신 내용이 전반적으로 맞습니다.

  1. 여러 스레드를 사용하는 경우, 처음에는 데이터베이스에서 설정하신 pageSize만큼의 데이터를 조회해 옵니다. 즉, 처음 스레드가 데이터베이스에서 총 300개의 데이터를 가져옵니다.

  2. AbstractPagingItemReaderCopyOnWriteArrayList에 해당 데이터를 저장하고, 다른 스레드들은 이 Reader를 공유하게 됩니다. 그러므로, 락 메커니즘이 적용된 doRead() 메서드를 호출해서 각 스레드가 개별적으로 데이터를 하나씩 추출하게 됩니다. 여기서 개별 스레드의 스택 안에 chunkSize만큼 저장됩니다.

  3. 이후 이러한 데이터들은 processwrite 단계를 거치게 되며, 각 스레드는 chunkSize만큼의 데이터를 처리합니다. 멀티 스레드를 사용함으로써, 전체적으로 총 300개의 데이터를 한번에 처리하여 성능을 향상시킬 수 있습니다.

멀티 스레드 환경에서 처리를 분산하여 속도와 성능을 향상시키는 것은 가능합니다. 하지만, 스레드 간의 데이터 동기화와 병행 처리를 위한 디자인에 신경써야 합니다. 이는 전체 시스템의 응답성을 최적화하고 데이터 일관성을 유지하는 데 도움이 됩니다.

추가적인 사항이 궁금하시다면 여기에서 더 많은 정보를 확인하실 수 있습니다.

hoonseung님의 프로필 이미지
hoonseung

작성한 질문수

질문하기