Dart에서 지원하는 것으로 멀티스레딩을 가능하게 해준다. Dart 언어는 기본적으로 싱글 스레드 언어이지만 isolate
를 사용하면 멀티 스레드를 가능하게 해준다.
isolate
는 각각이 독립된 실행 환경을 제공한다. 즉, 공유 메모리(shared-memory)를 사용하지 않고 각각의 isolate 환경이 독립적인 메모리 힙을 가지게된다. 이러한 특징으로 멀티 스레드 환경에서 공유 메모리 사용에 의한 mutex or lock 을 걱정하지 않아도 된다. Dart 공식 문서에서는 스레드, 프로세스와 비슷하지만 공유 메모리를 사용하지 않는 다는 점에서 다르게 보고 있다.
<aside> 💡 Mutex : Mutual Exclustion 상호 배제의 약자이다. 공유된 자원의 데이터 혹은 임계영역(Critical Section)등에 하나의 프로세스 또는 스레드가 접근하는 것을 막아준다(동기화 대상이 하나).
이와 반대로 Semaphore 세마포어는 대상이 하나가 아니라 동기화 대상이 하나 이상인 차이가 있다.
</aside>
isolate
, await/async
모두 비동기 프로그래밍에 사용되는 기술이지만 사용 목적과 방식에 차이가 있다.
독립적인 실행 환경을 갖고 있으며(독립 메모리) 다른 isolate 와도 완전히 분리된다. 작업 간의 영향을 주지 않고 동시에 여러 작업을 처리할 수 있다.
Future
와 함께 사용하며 비동기 작업을 동기적으로 처리하는 것처럼 보이게 만들어준다. await
키워드는 Future가 완료될 때 까지 현재 실행 스레드를 블로킹하고 완료되면 해당 결과를 반환한다. 이점에서 동시에 여러 작업을 하는게 아닌 비동기 코드를 동기적으로 작성하기 위해 사용된다.
Flutter 앱 또한 main isolate에서 싱글 스레드를 기반으로 실행이 된다. 이 안에서 이벤트 핸들링, API 통신등 모든 과정이 이뤄진다. 이 안에서 await/async
를 적정하게 사용기 때문에 문제없이 앱이 실행될 수 있다.
Flutter 에서는 아래와 같이 isolate
를 활용하여 다양한 작업을 처리할 수 있다.
Flutter에서는 isolate를 사용하여 비동기적인 작업을 처리할 수 있다. 예를 들어, 네트워크 요청과 같은 느린 작업을 처리할 때, isolate를 사용하여 메인 스레드의 작업을 방해하지 않고 백그라운드에서 처리할 수 있다.