카테고리 없음

Flutter - Isolate & Event Loop

자바리안 2025. 2. 19. 16:58
반응형

Dart는 싱글 스레드 언어이며, 일반적인 의미의 스레드 개념이 없으며, 대체로 Isolate를 사용하여 병렬 작업을 수행할 수 있다. 

하지만, Isolate는 별도의 메모리 공간을 갖고 독립적으로 실행되기 때문에 일반적인 스레드처럼 메모리를 공유하지 않는다. 대신, 메시지(Message Passing)를 통해 데이터를 주고받을 수 있다.

 

 Isolate자체적인 실행 환경에서 독립적인 Event Loop을 할당받게 된다.

즉, 별도의 Isolate을 생성하게되면 메인 Isolate와 분리된 별도의 Event Loop을 할당 받아 독립적으로 동작하게 된다.

 

Dart의 Event Loop은 Microtask QueueEvent Queue, 2개의 tassk queue를 포함하고 있으며 각 queue에 할당되는 task는 아래와 같이 분류된다.

 

  • Microtask Queue: Future.then()이나 scheduleMicrotask()로 예약된 짧은 작업들이 실행됨.
  • Event Queue: 타이머, I/O 작업, UI 이벤트 등 시간이 걸리는 작업들이 여기에 들어감.

 

Event loop은 microtask queue에 있는 작업들을 우선적으로 모두 수행 한 뒤에 event queue에 있는 작업들을 수행한다.

동기 코드의 경우 queue를 거치지 않고 바로 실행된다.

 

Event loop 테스트 코드 :

import 'dart:async';

void main() {
  print("Start");

  // Microtask Queue에 추가
  scheduleMicrotask(() => print("Microtask 1"));
  scheduleMicrotask(() => print("Microtask 2"));

  // Event Queue에 추가
  Future(() => print("Event Queue Task 1"));
  Future(() => print("Event Queue Task 2"));

  // Microtask 추가
  scheduleMicrotask(() => print("Microtask 3"));

  print("End");
}

/* Output
	Start
	End
	Microtask 1
	Microtask 2
	Microtask 3
	Event Queue 1
	Event Queue 2
*/

 

 

 

 

반응형