Flutter에서 isolate는 독립적인 스레드의 단위를 의미한다.
(Dart의 스레드와 같은 개념이다. )
isolate는 독립적인 메모리 공간 내에서 독립적으로 실행되는 프로세스이다.
이를 통해 개발자는 복잡한 앱을 구성하는데 필요한 병렬적인 처리를 쉽고 안전하게 수행할 수 있다.
(스레드 끼리 메모리를 공유하면 한 스레드가 메모리를 변경할 때 다른 스레드가 실행되지 않도록 Lock을 걸어 공유 리소스를 보호해야 하는데 Lock 은 심각한 교착상태, 기아상태를 유발할 수도 있다. 따라서 독립적인 메모리 공간을 갖는 isolate 는 안정성을 높이는데 도움을 준다.)
isolate은 Dart 프로그래밍 언어의 개념으로, 플러터 프레임워크에서도 지원한다.
예를 들어, 앱의 UI를 렌더링하는 동안 동시에 백그라운드에서 네트워크 요청을 처리하는 것이 가능하다.
이렇게 하면 UI 렌더링과 네트워크 요청 처리 모두가 빠르게 수행될 수 있다.
isolate 간 통신은 메시지 채널을 통해 통신한다.
플러터 엔진은 자체 관리 스레드를 생성하지 않고 embedder 가 책임진다.
Flutter에서 embedder 는 플러터 프레임워크를 호스팅하는 플랫폼 특정 구성 요소를 의미한다.
즉, 플러터 애플리케이션을 실행할 수 있는 플랫폼에서 플러터 프레임워크를 연결하는 구성 요소이다.
예를 들어, Android 플랫폼에서는 Android 기기에서 Flutter 애플리케이션을 실행하기 위해 Android 임베디드(Embedder)가 필요하다.
iOS 플랫폼에서는 iOS 기기에서 Flutter 애플리케이션을 실행하기 위해 iOS 임베디드(Embedder)가 필요하다.
플러터 프레임워크와 플랫폼 간의 상호 작용은 embedder를 통해 이루어진다.
embedder는 플러터 프레임워크에 플랫폼 기능(예: 카메라, 진동, 네트워크)을 제공하며, 플러터 프레임워크에서 그려진 UI를 화면에 표시한다.
플러터 엔진은 embedder 에게 4개의 taskRunner 를 제공한다. flutter 엔진은 runner 가 실제로 실행되는 스레드를 신경 쓰지 않아도 되지만 스레드 수명주기 동안 안정적으로 유지되어야 한다.
PlatformRunner - Flutter Engine과 밀접하고 주 스레드
UI Runner - Dart Runner 라고도 불리는데 Flutter Engine 에서 Dart Root isolated 를 실행하는 데 사용 된다.
Root isolated 는 응용프로그램의 주 코드를 실행하고 렌더링을 위해 Layer Tree 준비까지 담당한다.
또한, Native Plugins, Timers, Microtasks 및 비동기 IO의 메시지 응답도 처리한다.
GPU Runner - GPU 관련 함수를 호출한다. UI Runner 가 만들어준 Layer Tree 를 보고 GPU 명령어로 변환한다.
또한 플랫폼의 Frame Buffer, Surface LifeCycle 등등 GPU 자원을 사용하는데 책임을 지고 있다.
I/O Runner - 보통의 I/O 스레드와 같다. 작업이 오래 걸리는 부분을 이곳에서 실행시켜주는 것이다.
'# 02 > Flutter' 카테고리의 다른 글
[Flutter] 플러터 아키텍처! (0) | 2023.02.02 |
---|---|
[Flutter] 렌더링 원리 (0) | 2023.02.02 |
[Flutter] StatelessWidget / StatefulWidget 생명 주기 (0) | 2023.02.02 |
[Flutter] Widget / Stateless Widget / Stateful Widget / Inherited Widget (0) | 2023.02.02 |
[Flutter] Fuchsia 란? (0) | 2023.02.02 |