[Flutter] Isolate로 퍼포먼스 개선하기

티라노·2024년 12월 19일

Today I Learned

목록 보기
27/38

Isolate가 뭔지 알아보자.

프로세스와 스레드

프로세스란 하나의 프로그램을 말한다. 이 프로그램 안에는 여러 가지 작업 단위가 있을 텐데, 그 각각의 단위를 스레드라고 부른다.

여기서 중요한 것은 멀티 스레드 환경이라도 모든 스레드는 하나의 메모리(in 프로세스)를 공유한다는 점이다.
그러면 isolate 는 뭐가 다를까?

Isolate

Isolate독립적인 작업 단위이다.
이걸 쓰는 이유는 플러터가 싱글 스레드로 동작하기 때문이다.

하나의 스레드에서 작업을 순차로 처리하는데 중간에 시간이 오래 걸리는 이벤트가 발생하면 모든 작업이 밀려 멈춘다. 만약 애니메이션을 실행중이었다면 애니메이션에 중간에 멈추는 참사가 일어난다...이 때 Isolate 를 쓴다.

Isolate 는 스레드와 다르게 각각 메모리를 할당받는다.
따라서 UI를 나타내는 Isolate와 이벤트를 처리하는 Isolate를 따로 두면 싱글 스레드 프로세스에서도 여러 작업을 딜레이 없이 처리해 앱 성능을 개선할 수 있다.


Isolate는 어떻게 사용하지?

그러면 Flutter에서 Isolate를 활용하는 법을 알아보자.

1) Isolate.spawn

  • SendPortReceivePort 로 Isolate 객체 사이에서 통신한다.
  1. Isolate 클래스에서 메인 Isolate로 데이터를 전달한다. SendPort.send
  2. 메인 Isolate에서 데이터를 받는다.
    ReceivePort.listen
  3. 작업을 처리한다.
  4. ReceivePort를 닫는다.
    ReceivePort.close()

2) compute

따로 SendPortReceivePort 를 선언하지 않아도 함수 자체에 내장되어있다.

  1. Isolate에서 실행할 함수를 정의한다.
  2. compute 함수에 파라미터로 정의한 함수를 넣는다.

compute(함수, 함수에 넣을 파라미터)

0개의 댓글