guricode

[Flutter] Isolate란? 본문

앱/Flutter&Dart

[Flutter] Isolate란?

agentrakugaki 2025. 10. 20. 02:24

Isolate는 dart에서 병렬작업을 수행하기 위한 독립 실행 환경이다.

Dart는 기본적으로 단일 스레드 언어이기 때문에 CPU를 많이 사용하는 연산(이미지 처리, 대용량 Json파싱)을 메인 isolate(UI스레드)에서 처리하면 UI가 멈춘다.

이를 방지하기 위해 dart는 여러 Isolate를 만들어 각각 독립된 메모리와 이벤트 루프에서 동시실행시킨다.

메인 Isolate(UI 스레드)와 분리되어 동작하며, 메모리를 공유하지 않고 메시지로만 통신한다.

 

Main Isolate (UI 스레드)
   ↓
  SendPort → Message → ReceivePort
   ↓
Sub Isolate (별도 스레드)

기본 구조 Dart는 기본적으로 1개의 메인 Isolate(UI)에서 실행됨
역할 무거운 연산을 별도의 Isolate로 분리해 병렬 처리
메모리 구조 각 Isolate는 메모리를 공유하지 않음 — 메시지 전송(port) 으로만 통신
주요 사용처 이미지 인코딩, 파일 I/O, JSON 파싱, 데이터 암호화 등
한 줄 요약 “UI 멈춤을 막기 위해 별도 공간에서 연산하는 Dart의 병렬 실행 단위”

 

구분                         Isolate                                             Future (비동기)                                   Thread (스레드)

정의 Dart에서 병렬 실행을 위한 독립 메모리 공간 메인 Isolate 안에서 비동기로 실행되는 작업 예약 단위 OS 수준의 병렬 실행 단위 (CPU 스케줄링 단위)
메모리 구조 각 Isolate는 독립된 메모리를 가짐 → 공유 불가 메인 Isolate의 같은 메모리에서 실행 스레드는 공유 메모리 기반
통신 방법 SendPort / ReceivePort 메시지 전송 공유 메모리 접근 가능 (메인 상태 공유) 공유 메모리, Lock, Mutex 필요
병렬 처리 진짜 병렬 (다른 CPU 코어 사용 가능) 동시성 (이벤트 루프 내에서 순서 제어) 진짜 병렬 (OS 관리)
UI 접근 가능 여부 불가 (별도 환경)  가능 (메인 Isolate) Flutter에서는 UI는 메인 스레드 전용
생성 비용 높음 (독립 환경 생성) 낮음 (이벤트 루프 예약) 높음 (OS 자원 필요)
대표 사용처 CPU 연산, 이미지 처리, JSON 파싱 네트워크 호출, 파일 읽기, UI 업데이트 OS 수준 동시 작업, Flutter에서는 직접 사용 거의 없음
예시 코드 Isolate.spawn() / compute() Future(() async => …) (Flutter에서 직접 사용 불가)
비유 별도 컴퓨터에서 동시에 계산 한 컴퓨터 안에서 일 순서 조정 여러 CPU 코어에서 동시에 실행

 

Future는 메인 Isolate 내부의 비동기 실행 단위이고,
Isolate는 완전히 별도 메모리에서 병렬로 실행되는 Dart 환경이다.
즉, Future는 “비동기”, Isolate는 “병렬” 이다.