Study/Dart,Flutter

3. Dart Flutter, Asynchronous, Isolates와 Event Loop 에 관한 고찰

코딩 잘 할거얌:) 2021. 7. 23. 01:16
반응형

오늘은 이론적인 내용을 다뤄보도록 하자.

Flutter로 개발을 하면 흔하게 사용하는 Future, async 그리고 await가 비동기식으로 작동하는 원리를 파악해보려고 한다.

이론이라니 벌써부터 머리가 아프네...


먼저 Dart 공식 홈페이지에서 찾아보았다.

https://dart.dev/codelabs/async-await

 

Asynchronous programming: futures, async, await

Learn about and practice writing asynchronous code in DartPad!

dart.dev

 

읽어보면 Asynchronous 즉 비동기식 프로그래밍, futures, async 그리고 await에 관련된 내용이 나온다. 비동기식이란 동시에 일어나지 않게 일처리 하는 방식을 뜻하며, 동기식의 반대되는 작동방식이다.

코드로 간단하게만 보자면,

  print("Start");
  Future.delayed(new Duration(seconds: 1))
      .then((value) => print("Asynchronous"));
  print("End");
  
  //Start
  //End
  //Asynchronous

보통의 동기식으로 작동을 한다면 start 후 Asynchronous가 와야하지만, End가 먼저 오는 모습이다. 이게 비동기식으로 작동하는 것이다.

 

그렇다면 Future로 작성한 함수는 어디에서 작동을 하는 것일까? 

Main Thread 이외의 다른 Thread에서 작업할 수 있다는 걸 python이나 android 혹은 다른 언어를 조금 다뤄본 사람이라면 예상할 수 있다. Thread는 프로세스 내에서 실행되는 흐름의 단위이다.

 

https://medium.com/dartlang/dart-asynchronous-programming-isolates-and-event-loops-bffc3e296a6a

 

Dart asynchronous programming: Isolates and event loops

Dart, despite being a single-threaded language, offers support for futures, streams, background work, and all the other things you need to…

medium.com

하지만 dart에서는 Single-threaded 언어이다. 그래서 multi-thread방식이 아닌 Isolates와 Event Loops를 이용하여 비동기를 지원하게 된다. 그리고 Thread의 특징은 메모리를 공유한다는 거에 있지만, 각각의 Isolate는 독립적인 메모리와 Thraed를 가지고 있다. 그로 인해 메모리를 공유하는 Thread와는 다르게 Race Condition(경쟁상태)을 고려할 필요가 없다. 그리고 Isolate를 같이 일을 처리하기 위해서는 message를 통해서 서로 전달을 할 수 있다.

 

그렇다면 Event Loops는 무엇일까?

Event Loops는 간단하게 event들을 담는 Queue이다. 화면을 터치하고, 데이터를 다운로드하는 등 이벤트들을 Queue에 담아서 이벤트에 처리한다. 종료되는 상황이 온다면 garbage collector의 트리거가 작동한다.

 

간단하게 이 정도로 살펴봤고, 다음 포스팅은 then, whenComplete, catchError 그리고 try catch finally을 살펴보도록 하자.

 

728x90