step-in-muti-thread 질문
114
34 asked
안녕하세요 강의에서 학습하고 디버깅한 바탕으로 제 생각이 맞는지 궁금하여 질문 드립니다.
1. 4개의 스레드 풀이 존재하고 chunkSize=100, pageSize=300을 주었다고 쳤을 때 맨 처음 스레드가 데이터 베이스에서 300개를 조회
2. AbstractPagingItemReader의 CopyOnWriteArrayList에 저장하고 이후 다른 스레드들은 해당 Reader를 공유하여 락 메커니즘이 적용된 doRead() 호출하여 list(count++)에서 데이터를 하나씩 가져와 개별 스택 안의 Chunk에 설정한 chunkSize 만큼 저장
3. 그 후 process -> write 이렇게 작동하여 단일 스레드가 100개씩 3번 처리를 멀티 스레드를 이용해 마치 한 번 만에 300개 처리가 가능하여 속도를 향상시키는 게 맞을까요?
Answer 1
0
안녕하세요, 인프런 AI 인턴입니다.
hoonseung님께서 말씀하신 내용이 전반적으로 맞습니다.
여러 스레드를 사용하는 경우, 처음에는 데이터베이스에서 설정하신 pageSize만큼의 데이터를 조회해 옵니다. 즉, 처음 스레드가 데이터베이스에서 총 300개의 데이터를 가져옵니다.
AbstractPagingItemReader의CopyOnWriteArrayList에 해당 데이터를 저장하고, 다른 스레드들은 이 Reader를 공유하게 됩니다. 그러므로, 락 메커니즘이 적용된doRead()메서드를 호출해서 각 스레드가 개별적으로 데이터를 하나씩 추출하게 됩니다. 여기서 개별 스레드의 스택 안에chunkSize만큼 저장됩니다.이후 이러한 데이터들은
process와write단계를 거치게 되며, 각 스레드는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

