# isolate

[Flutter] 이벤트 루프(Event Loop)와 Isolate
Dart는 JavaScript와 같이 싱글스레드 언어이다(애초에 js잡겠다고 나온 언어이니..) 이러한 싱글 스레드 언어의 경우 이벤트 루프의 개념을 알고 넘어가는 게 중요하기에 간단히 정리해 보았다. 이벤트 루프(Event Loop)란? 이벤트 루프는 이벤트나 작업을 관리하고 하나의 작업이 완료되면 다음 작업을 실행하는 역할을 하는 프로그래밍 구조이다. 이벤트 루프는 큐(queue)를 사용하여 이벤트나 작업을 관리하며 그 중 하나를 선택하여 실행한다. Dart에서 이벤트 루프는 두 가지 주요 큐를 관리하는데 그것이 마이크로태스크 큐(Microtask Queue)와 이벤트 큐(Event Queue)이다. 1. 마이크로태스크 큐(Microtask Queue) 마이크로태스크 큐에 들어있는 작업들은 현재 실행 중인 코드가 끝나자마자 실행된다. 마이크로태스크는 우선 순위가 높아서 마이크로태스크 큐가 비워질 때까지 이벤트 루프는 이벤트 큐의 작업을

진짜 🐶쉽게 Isolate 적용하기
해당 포스팅은 유튜브 영화&드라마 리뷰 영상 큐레이션 플랫폼 Plotz를 개발하면서 도입된 기술 및 방법론에 대한 내용을 다루고 있습니다. 다운로드 링크 : 앱스토어 / 플레이스토어 이번 포스팅에서는 아주 쉽게 Flutter 프로젝트에 Isolate을 적용

동시성
https://dart.dev/guides/language/concurrency UI 처리는 어떻게 이루어지는지 궁금해서 찾아보다가 스레드에 대한 정보를 보다보니 동시성을 다루게되는…🙄 부끄럽지만 시간나면 봐야지 하다가 영문서라 미루고 미룬 페이지이기도 합니다. 그래서 요악부터 하자면 … 자바스크립트인데..? Isolate Dart는 싱글 스레드 기반 언어지만 타 언어들과 같이 비동기 처리를 위해 Isolate라는 일종의 스레드를 제공한다. 모든 Dart 코드는 Isolate 내부에서 처리되며, Thread Safe 하게 격리된 상태로 실행된다. Thread Safe할 수 있는 이유는 Isolate간에 데이터를 공유하지 않도록 디자인되었다. 따라서 공유 메모리 영역이 존재하지 않기 때문에 하나의 공유 자원에 둘 이상의 스레드가 접근하는 임계 영역에 대한 문

[Flutter] hivebox를 통해 새로운background notification 표시하기
1. 안드로이드의 background : isolate Flutter로 개발을 하다보면 종종 안드로이드와 ios에서 다르게 동작하는 상황을 마주하게된다. 현재 회사서비스에서는 FCM과 flutterlocalnotifications을 사용해서 notification을 구현하고 있는데 안드로이드 background에서 notification이 동작하지 않는 것을 확인하였다. > ... When received, an isolate is spawned (Android only, iOS/macOS does not require a separate isolate) allowing you to handle messages even when your application is not running. ... [FlutterFire > CloudMessaging > Background messages](https://firebase.flutter.dev/docs/messaging/

Dart - isolate & Event Loop
Dart는 싱글 스레드 언어입니다. 때문에 비동기 코드를 작성하는 것은 매우 중요하죠.(싱글 스레드이기 때문만은 아니지만ㅎ) > 💡 isolate란? Dart의 싱글 쓰레드를 지칭하는 말. 독립적인 메모리 공간(스택), 이벤트 루프를 가지고 있다! > 기존 멀티 쓰레딩 지원 언어(Swift, Kotlin)에서는 공유 자원 접근이 가능했기 때문에 처리과정이 굉장히 복잡하고 오류를 일으키기 쉬었습니다. 하지만 Dart는 싱글 스레드를 내세워 이러한 단점들을 보완했습니다. 메모리 할당 및 해제(가비지 콜렉션)이 작동하는데 Lock의 개념이 필요하지 않아져 사용하기 편리해 졌지만 공유 자원이 존재하지 않기에 isolate간 데이터를 공유시에는 A isolate에서 B isolate로 메세지를 주고받는 형식입니다. 이벤트 루프 
dart isolate 개념 알아보기
isolate dart는 싱글 스레드 환경이다. 비동기 프로그래밍을 지원하기 때문에 서버에서 데이터를 불러오며 ui를 그릴 수 있지만 불러오는 데이터가 크거나 어떤 복잡한 로직을 실행하면 버벅이는 모습을 볼 수 있다. 이런 현상을 해결하기 위해 구글링하다 찾게 되는것이 isolate이다. isolate를 이용한 병렬작업은 자바에서의 멀티 스레딩과 비슷하지만 차이가 있다면 하나의 isolate가 하나의 스레드를 가지고 있다는 것이다. > All dart code runs in an isolate one Isolate contains memory and an event loop and that's where all the code runs 하나의 isolate는 별도의 메모리와 하나의 스레드, 이벤트 루프를 가지고 있다. flutter앱도 main isolate에서 실행된다. 이러한 점은 자바에서 여러 스레드가 하나의 메모리를 공유한다는 점에서 차이가 있다. syn

[Flutter] Isolate
Isolate? > 모든 Dart 코드가 실행되는 곳. 단일 스레드가 이벤트 루프를 실행하고 있다. C++ 같은 언어들은 같은 메모리를 공유하는 다중 스레드를 가질 수 있고 원하는 어떤 코드든지 실행시킬 수 있다. Dart에서는 스레드가 메모리를 가진채로 isolate에 있고 이벤트만 처리한다. 실행해야 할 계산이 너무 많아서 프레임을 낮추는 경우에 isolate.spawn이나 compute를 이용한다. → 둘다 개별 isolate를 만들어서 수 처리를 하며 그동안 메인에 부담을 주지 않으면서 widget tree를 rebuild하고 rendering한다. 새로운 isolate는 해당 메모리에서 고유 이벤트 루프를 가지게 된다. isolate는 서로 분리된 작은 공간들이고, 둘을 함께 작동시키려면 메시지를 서로 전달하도록 하면된다. 이벤트 루프 - 이벤트 큐에서 가장 오래된 이벤트를 처리하고 그다음으로 넘어