플러터는 싱글스레드로 실행된다.
하지만 IO작업, CPU바운드 작업을 할 때 싱글스레드(메인스레드)에서 작업하면 jank가 발생한다.
왜냐면, 플러터는 60프레임을 1초에 띄우는 것을 목표로하는데(16.7ms마다 프레임 교체가 일어나야함) 다른 무거운 작업이 진행중이면 프레임 교체 시 버벅거리는 현상이 발생하기 때문이다.
UI업데이트에 영향을 끼치지 않으면서 무거운 작업을 하기 위해서 별도의 isolate가 필요하다.
기본 isolate에서도 대부분의 작업을 문제없이 실행할 수 있다.
하지만 CPU바운드 작업(대용량 이미지 처리, 복잡한 역/직렬화 등) 등 작업이 끝날때 까지 스레드를 블로킹 하는 작업을 하게될 때 별도의 isolate가 필요하다.
void main() async{
print('시작');
await Future.delayed(Duration(seconds:1)).then((_) => print('완료'));
}
void main(){
print('시작');
Future.delayed(Duration(seconds:1)).then((_) => print('완료'));
}