모바일 개발하는 자바리안의 메모장

Flutter - Single-threaded 환경에서 비동기 처리가 어떻게 가능할까 본문

Flutter

Flutter - Single-threaded 환경에서 비동기 처리가 어떻게 가능할까

자바리안 2023. 4. 10. 14:57
반응형

Dart는 Single-threaded 환경에서 작동한다.

그럼 우리가 await, async 등을 통해 사용한 비동기 처리는 어떻게 가능할까...

 

정답은 Event Loop이다.

이벤트 루프는 애플리케이션에서 발생하는 이벤트(예: 사용자 입력, 타이머, 네트워크 응답 등)를 처리하며, 이러한 이벤트가 발생할 때마다 이벤트 루프는 각 이벤트에 대한 callback을 실행한다.

 

이벤트는 Event Queue에 추가되며 다음과 같이 2개 타입의 Event Queue가 존재한다 :

    1. Microtask Queue

    2. Event Queue

 

Microtask Queue는 이벤트 루프가 처리해야 할 가장 높은 우선순위를 가지는 작업을 담는 Queue로 Microtask Queue에는 Future.microtask()나 Future.sync()와 같이 비동기 작업을 스케줄링하는 메소드가 있다. 이 작업들은 현재 실행 중인 이벤트 루프의 작업이 모두 완료된 이후에 바로 실행된다.

Async/await를 실행했을 때 Future 정보를 microtask에 담아둔 뒤, 다른 event들을 처리하다가 future가 completed 상태가 됐을 때 가장 높은 우선순위로 처리한다.

실제로는 sequental하게 처리되지만 Event Loop에 의해 우선순위를 고려하여 빠르고, 효율적으로 evente들을 처리해주기 때문에 사용자 입장에선 비동기 처리로 느껴지게되는 것이다.

 

Event Loop 처리 Flow chart diagram

 

반응형
Comments