Dart - isolate & Event Loop

로건·2022년 6월 30일
1

Dart

목록 보기
3/3

Dart는 싱글 스레드 언어입니다. 때문에 비동기 코드를 작성하는 것은 매우 중요하죠.(싱글 스레드이기 때문만은 아니지만ㅎ)

💡 isolate란?
Dart의 싱글 쓰레드를 지칭하는 말. 독립적인 메모리 공간(스택), 이벤트 루프를 가지고 있다!

기존 멀티 쓰레딩 지원 언어(Swift, Kotlin)에서는 공유 자원 접근이 가능했기 때문에 처리과정이 굉장히 복잡하고 오류를 일으키기 쉬었습니다. 하지만 Dart는 싱글 스레드를 내세워 이러한 단점들을 보완했습니다.

메모리 할당 및 해제(가비지 콜렉션)이 작동하는데 Lock의 개념이 필요하지 않아져 사용하기 편리해 졌지만 공유 자원이 존재하지 않기에 isolate간 데이터를 공유시에는 A isolate에서 B isolate로 메세지를 주고받는 형식입니다.

이벤트 루프

isolate는 내부적으로 Event Loop를 가지고 있으며 이벤트(I/O 작업, 네트워크 작업, 터치 등)를 기다리다 이벤트가 들어오면 큐에 넣고 먼저 들어온 순서대로 받아서 처리합니다.

이벤트가 언제 어떤 순서로 일어날지 앱에서는 예측할 수 없기 때문에 이런 큐 시스템과 항시 동작하는 이벤트 루프가 필요한겁니다. (사용자가 언제, 어떤 식으로 인터랙션을 하느냐에 달렸기 때문에)

비동기 통신 또한 마찬가지입니다. Dart는 싱글 쓰레드기 때문에 API 통신을 하는 동안 기다리게 되면 앱이 멈춰있을 겁니다. API 요청(Request)을 한 후 다른 일을 하며 API 응답(Response)가 들어오면 이를 이벤트로 던지죠. 그 후 해당 이벤트를 이벤트 루프가 처리하게 됩니다!

👉 이벤트 루프는 아무것도 하지 않을 때(이벤트가 없을 때) 기다림 이 시간동안 가비지 콜렉터가 작동한다.

profile
Life Designer

0개의 댓글