Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- 엡
- nodejs
- JQ
- abap
- JS
- 자바 출력 방식
- react
- firebase
- scss
- 단축키
- Flutter
- unity
- ListView
- develop
- Clean Architecture
- println
- UI/UX
- printf
- LLM
- 앱심사
- 배포
- lifecycle
- 자바 포맷 출력
- java 콘솔 출력 차이
- riverpod
- npm
- DART
- java 출력
- java
- 자바스크립트
Archives
- Today
- Total
guricode
[Flutter] Isolate란? 본문
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는 “병렬” 이다.
'앱 > Flutter&Dart' 카테고리의 다른 글
| [Flutter] 비동기 처리하는 여러가지 방법 (0) | 2025.10.20 |
|---|---|
| [Flutter] Clean Architecture란? (0) | 2025.10.20 |
| [Flutter] 네이티브 기능과 연결하기 위한 패키지 사용 경험 (0) | 2025.10.20 |
| [Flutter]무한 스크롤을 구현하는 방법,당겨서 새로고침 기능을 구현하는 방법 (0) | 2025.10.20 |
| [Flutter]스로틀링, 디바운싱 (0) | 2025.10.20 |