비동기(5)
-
[Dart] Completer를 사용한 비동기 제어
[Dart] 메시지를 통해 동작하는 Isolate를 추상화하기Isolate에 대해 알아보자에서 Isolate를 사용할 시 유의해야 할 점과, 포트를 사용해서 Isolate 사이에 여러개의 메시지를 주고받기에 기재되어있는 예제를 살펴봤습니다. 유의할 점 중에는 Isolate 갯zerodice0.tistory.com 이전에 여러가지 동작을 하나의 Isolate에서 처리 가능하도록 작성한 적이 있었다. 이를 통해서 Worker를 1~2개만 생성한 뒤 원하는 작업이 별개의 Isolate에서 동작하도록 작성할 수 있게 됐다. 물론 앱의 성능을 위해서도 Isolate는 1~2개 정도가 실행되는게 가장 적당했는데, 어느 순간 확인해보니 Worker가 4~8개씩 실행되는 경우가 있는게 아닌가. 어디가 문제인지 고민하..
2025.01.15 -
[Dart] Isolate에 대해 알아보자
#1. Dart와 동시성Dart는 기본적으로 싱글 스레드 환경에서 동작합니다. Javascript에 익숙하다면, 여기까지만 들어도 '엥? 그럼 혹시 Dart도 비동기 처리는 Javascript처럼...?'이라는 생각이 들 텐데요. 그렇습니다. Javascript와 마찬가지로 Dart 역시 이벤트 루프를 가지고 있으며, 비동기 처리를 진행하는 방식은 Javascript와 비슷합니다. 이벤트 루프에 대해 자세히 설명되어있는 글들은 여러가지가 있겠지만, Dart의 이벤트 루프에서는 Dart 문서에 기재되어있는 Dart의 동시성 항목을 참고해주세요. 대충 설명하면 Dart로 작성된 프로그램이 실행되면 이벤트들이 저장되는 이벤트 큐가 있고, 우리가 Dart로 작성하지 않아도 이벤트 큐에서 대기하고 있는 이벤트들을..
2024.07.29 -
Provider의 ChangeNotifier와 Dispose와 비동기 함수
Flutter를 사용해서 코드를 작성하는 도중, 다음과 같은 에러가 발생했다.{Provider} was used after being disposed. notifyListener()를 호출하는 비동기 함수를 실행한 뒤, 함수 실행이 완료되기 전에 다른 페이지로 이동했기 때문에, dispose()가 호출된 다음 notifyListener()가 호출되어 발생한 에러 문구다. State에는 mounted라는 상태값이 있어서 dispose()가 된 이후에는 setState()를 호출하지 않을 수 있었으나, Provider는 기본적으로 dispose()가 실행됐는지 확인할 방법을 알려주지 않는다. 비동기 함수를 다루다보면 쉽게 만날 수 있는 문제여서 그런지, 에러 문구를 구글링해보니 쉽게 대응 방법을 찾을 수..
2024.06.20 -
[Flutter] 여러개의 비동기 처리에 대한 경쟁 상태의 처리
여러개의 비동기 처리에 대한 경쟁 상태의 처리 Dart에서는 Future 클래스를 사용해서 비동기에 대한 처리를 할 수 있습니다. async/await에 대한 내용은 비동기(Asynchronous)와 async/await, 그리고 여러개의 await에 대한 비동기 처리에서 한 차례 언급했으므로, 이번에는 가볍게 패스할께요. 이번에 살펴볼 내용은 여러개의 비동기 처리가 경쟁 상태(Race condition)로 주어졌을 때, 어떻게 처리하는지에 대한 얘기를 해보려고 합니다. 엥? 비동기에 경쟁 상태? 그거 Future.any() 호출하면 끝 아니냐? Dart의 dart:async 패키지에서 제공하는 Future패키지에는 Future.any라는 메소드를 제공합니다. Future.any(Iterable futu..
2021.07.27 -
비동기(Asynchronous)와 async/await, 그리고 여러개의 await에 대한 비동기 처리(Future.wait/Promise.all)
비동기(Asynchronous)에 대해 알아봅시다. 당신은 새로 들어온 직원 A군의 사수를 담당하게 됐습니다. A군이 일을 얼마나 잘 하는지 가늠이 안되는 와중에, 꽤 복잡한 일을 맡기게됐습니다. 당신은 A군이 일을 얼마나 잘 처리했는지 확인하고싶지만, 당장 맡은 일이 바빠서 신경 쓸 겨름이 없어요. 결국 당신은 A군에게 일을 맡겨놓고, '다 끝나면 나한테 말해줘요. 그거 끝나고 뭐 해야하는지 알려줄께요.'라고 말합니다. 그리고 다시 업무로 복귀한 당신. 와! 당신은 지금, A군과 비동기적으로 일하고 있어요! 비동기적으로 일한다는 건 특정 시점으로부터 하나의 작업이 완료될 때까지는 신경쓰고 있지 않다가, 그 작업이 완료되면 처리한 결과를 가지고 계속해서 진행하겠다는 의미입니다. 뭔가 문장이..
2021.01.29