inflearn logo
강의

Course

Instructor

Spring Batch

Multi-threaded Step

step-in-muti-thread 질문

114

hoonseung

34 asked

0

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

 

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

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

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

 

스프링 스프링배치 springbatch multithread 비동기

Answer 1

0

communityai8509

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

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

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

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

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

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

Scene 전환에서

0

22

1

메소드에 대한 lockFlag 작동 방식 문의드립니다.

0

21

1

모니터와 synchronized, ReentrantLock, 원자적연산 CAS관련해서 추가적으로 더 깊게 공부했는데 제가 이해한 것이 맞나요??

0

81

1

Future cancel기능을 사용했지만 interrupt가 발생하지 않을 때 어떻게 처리해야하나요?

0

70

2

2.스레드 생성과 실행 - 17P 그림 문의

0

70

2

자바 동시성 현업에서 사용예시가 궁금합니다

0

128

1

Enemy HP 연동 파트에서 Job을 생성후, System에서 Job을 스케쥴링 해야합니다.

0

70

3

ReentrantLock 동작 원리에 대한 질문입니다.

0

79

1

synchronized 대신 join 을 사용하여 순서를 보장할 경우 해법이 아닌가요?

0

90

2

메모리 가시성 문제 질문

0

65

1

Future4-이유 질문

0

61

1

ecs관심이 있었는데 강의 잘 보았습니다.

1

126

2

오타 제보

0

70

2

cpu 코어와 쓰레드 개수

0

216

2

runnable 질문

0

91

2

자바가 아닌 다른 언어에서도

0

107

1

메모리 가시성 문제가 발생하는 이유

0

122

1

데몬스레드가 어떨 때 사용이 되는지 궁금합니다.

0

75

1

Future.cancel() 취소를 사용하는 예가 궁금합니다.

0

81

1

멀티스레드 단일스레드

0

55

0

chunk 처리 기반에서 cursor 방식과 메모리 사용

1

480

2

ThreadPoolTaskExecutor 여러 Job 실행 시 대기 처리

1

1424

1

비동기식으로 jobLauncher 실행시키는 것 관련 질문 드립니다.

0

800

1

docker db (mysql) 이 죽는 현상이 있습니다.

1

641

2