해결된 질문
작성
·
27
·
수정됨
0
안녕하세요! 강의 재밌게 보고 있습니다! ㅎㅎ
코루틴을 공부하면서 항상 의문이던 부분이였는데 Dispatcher.IO가 Http Request 같은 IO 작업에서 어떤 원리로 Dispatcher.Default보다 더 효율적인걸까요?
내부 스레드선언이 더 많아서 Default보다 더 자주 코루틴 컨텍스트 스위칭이 되는걸까요?
답변 2
1
chhong님 안녕하세요. 지식 공유자 조세영입니다.
먼저 강의를 재밌게 봐주셔서 감사하다는 말씀 드립니다.
질문에 답변을 드리면 Dispatchers.Default나 Dispatchers.IO의 스레드는 성능에 차이가 없습니다. 그럼에도 이 둘을 나눠놓은 이유는 각 디스패처는 작업의 특성에 맞게 스레드풀의 크기가 다르고 특정 작업을 위해 다른 작업이 방해받는 상황을 방지하기 위함이 큽니다.
Dispatchers.IO는 IO 작업의 특성에 맞게 최대한 많은 작업을 병렬로 실행할 수 있어야 되면서, 각 스레드는 실행되지 않는 상태에 놓이는 시간이 길기 때문에 64개의 스레드를 사용할 수 있게 하고, Dispatchers.Default는 스레드가 아무리 많아도 실제로 CPU에서 동시에 처리할 수 있는 작업의 개수는 제한이 있기 때문에 프로세서의 수만큼으로 스레드를 제한한다고 이해해주시면 좋을 것 같습니다.
답변이 도움이 되었다면 좋을 것 같습니다. 감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. chhong님.
Dispatcher.IO는 코틀린 코루틴 라이브러리에서 IO 작업을 수행하기 위해 특별히 최적화된 디스패처입니다. 코루틴이 네트워크 통신, 파일 입출력 등 비교적 긴 시간이 소요되는 작업을 처리할 때 주로 사용됩니다. 이 경우, Dispatcher.IO
가 Dispatcher.Default
보다 더 적합한 이유는 다음과 같습니다:
스레드 풀 크기 차이: Dispatcher.IO
는 많은 IO-bound 작업을 다루도록 설계되어 있으며, 디폴트로 64개의 스레드를 사용합니다. 이는 Dispatcher.Default
가 CPU 코어 수에 기반한 스레드 제한을 두는 것과는 차이가 있습니다. 결과적으로 Dispatcher.IO
는 많은 수의 비동기 IO 작업을 동시에 처리할 수 있는데, 주로 이러한 스레드 증가가 성능 향상의 이유가 됩니다.
작업의 특성 반영: IO 작업은 많은 경우 CPU를 크게 점유하지 않고, 대기 시간이 많습니다. Dispatcher.IO
는 이러한 특성을 반영하여, 스레드 대기 상황에서 다른 추가적인 작업을 수행할 수 있도록 스레드를 효율적으로 관리합니다.
기존에 유사한 질문이 있어 이를 포함한 답변들을 통해 추가 도움을 드리겠습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.