• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

AsyncItemReader

23.02.14 20:10 작성 23.02.14 20:15 수정 조회수 202

0

AsyncItemReader는 없는 이유가 있나요?


읽는거도 비동기처리하면 그만큼 또 메인스레드를 다른용도로 활용할 수 있으니까요

 

답변 1

답변을 작성해보세요.

0

넓은 의미에서 보면 모든 처리를 비동기로 해도 문제 될 것은 없습니다.

다만 배치 입장에서 보면 읽는 행위를 비동기로 하더라도 읽을 동안에 메인 스레드가 다른 처리를 할 만한 것이 딱히 없기도 하고 배치는 청크 단위로 데이터를 읽어오고 커밋 & 롤백구조로 되어 있는데 비동기로 데이터를 읽어오게 되면 완료되었을 때 다시 메인스레드로 Future 방식으로 데이터를 넘기는 부분등 복잡도가 늘어날 수 밖에 없습니다.

어차피 배치는 원 소스 즉 데이터를 읽어오는 것 부터 시작이기 때문에 첫 시작을 동기로 하든 비동기로 하든 그것 자체가 큰 차이가 없지만 프로세스와 쓰기 작업은 데이터를 가공하고 처리하는데 오래 걸리는 작업들을 비동기로 하는것은 동기로 하는 것과 명확한 차이가 있기 때문에 그런것이 아닐까 하는 생각입니다.

어디까지 메인스레드와 비동기 스레드로 구분할 것인지 결정은 효율적인 측면을 최대한 고려해서 설계하는 것이 중요하므로 스프링 배치 개발팀이 나름대로 정한 기준인것 같습니다.