안녕하세요!
안드로이드를 좋아하는 Assist입니다.
오늘도 인강을 듣고 정리를 하는 시간을 가져 볼려고 합니다.
오늘은 Coroutine의 Dispatcher을 알아보도록 하겠습니다.
Coroutine의 Dispatcher란 내가 어떤 쓰레드에서 실행되게 한다라고 정의를 하여
프로그램을 개발을 할때 효울적으로 작업을 처리하도록 도와주는 것입니다.
종류는 여러가지가 있지만 대표적으로 IO, Default, Unconfiend, newSingleThreadContext가 있습니다.
그럼 하나씩 알아보도록 해보겠습니다.
전 개념도 중요하게 생각을 하지만 어떻게 쓰이는지도 써보도록 하겠습니다.
Coroutine Default은 코어 수에 비례하는 스레드 풀에서 수행을 한다
라고 적혀 있는데요
그럼 어디서 쓰는 것일까요?
바로 복잡한 연산에 적합하다고 kotlin playground 와 많은 강사진이 이야기를 하고 있습니다.
좀더 간단하게 예를 들어보도록 하겠습니다.
개발자: Mobile App 의 RoomDatabase에서 1차로 데이터를 가지고 오고
해당 데이터를 변수에 저장한다음
사용자가 원할때 데이터를 알맞은 데이터를 추출 후 연산해서 보여주자!
뭐 이런식이겠죠
해당 사항은 저의 실제 프로젝트 기능중 하나 입니다.
예를들어
그럼 전 여기서 1주일치를 데이터를 불러온 후 사용자가 1시간 , 1일 데이터를 달라고 하면
그때 연산해서 주는 역할로 썼습니다.
Coroutine IO은 CPU를 덜 소모 하는 특징이 있습니다.
IO란 파일의 입출력 혹은 네트워크 통신 관련하여 사용하다록 권장하는 것입니다.
뭐 간단한 예시로 API 호출 혹은 CSV파일 생성이 있겠네요
Coroutine Unconfined은 어디에도 속하지 않는다는 특징이 있습니다.
그래서 제가 만약 Unconfined을 생성해서 프로그램을 실행 시켰다고 생각해 봅시다.
launch(Dispatcher.Unconfined) {
print("Coroutine 2 : ${Thread.currentThread().name}")
}
아마 해당 코드를 실행하면 여러 Thread name이 출력될수 있습니다.
즉 여러 Thread에서 작동한다고 생각하면되겠네요
현직 분들은 해당 Dispatcher은 잘 안쓰네요. 이유는 어디서 동작을 하는지 몰라 제어가 어렵다고 판단한거 같습니다.
Coroutine newSIngleThreadContext은 실행시 항상 새로운 Thread을 생성 합니다.
예를들어 프로그램이 수많은 Thread을 생성해서 작업을 하고 있다.
그러면 Thread을 할당을 못받을수 있습니다.
하지만 newSigleThreadContext은 새로 생성해서 작업을 합니다.
오늘도 열심히 공부를 한 느낌이 나네요...
언제나 느끼지만 어디서나 정답은 없는거 같습니다.
그럼 오늘도 읽어주셔서 감사합니다 .
-피드백와 비판은 언제나 환영입니다-