Jaebi의 Binary는 호남선

Flutter - Isolate & Event Loop 본문

공부

Flutter - Isolate & Event Loop

jaebijae 2024. 6. 1. 20:06

목차

    Isolate

    • Dart - Single Threaded Language이나 async 가 가능함
    • Isolate - 모든 다트 코드들이 실행 되는 곳
      • Dart에서 비동기 작업을 가능하게 함
      • 기계 안에 있는 작은 메모리 공간, single thread가 event loop을 실행
      • Dart에서는 thread가 memory를 가진채로 isolate에 있음, 그리고 그 이벤트만 실행
      • 대부분 dart app은 single isolate에서 코드를 실행하지만 다중으로도 사용 가능
        • 계산량이 많아서 main isolate에서 프레임을 낮추는 경우:
          • 개별 isolate을 만들어서 처리 → main isolate에 부담을 주지 않으면서 위젯트리를 다시 만들고 렌더
          • 새로 생성된 isolate은 자기 고유의 event loop과 메모리를 가지게됨, main isolate에서 상속되었지만 main isolate은 접근 불가
          • 서로 작용하려면 메시지를 서로 전달하는 방식 밖에 없음 (port를 통해서)
      • Isolate 장점: (thread가 하나 밖에 없기에) memory allocation & garbage collection은 locking이 필요 없음
        • 메모리가 변형되지 않음

    Event Loop

    • App의 Lifetime start & end사이에는 모든 이벤트들 → Disk I/O, User Gesture등
    • 모든 이벤트들이 어떤 순서로 일어나는지 앱에서는 예측할 수 없음, 그리고 block되지 않는 single thread로 모든걸 처리해야함
    • Event Loop → Event queue에서 하나씩 순차적으로 처리하여 queue가 비어질때 까지 게속 돌아감
      • 아무것도 하지 않고 있을때는 thread는 그냥 다음 이벤트 기다림
    • 예시:
    ElevatedButton(
      child: const Text('Click Me'),
      onPressed: () {
        final myFuture = http.get(Uri.parse('https://example.com'));
        myFuture.then((response) {
          if (response.statusCode == 200) log('Success');
        });
      },
    )
    • 작동 → Flutter에서 버튼 만듦 → 화면에 표시 → 기달 (Event Loop은 걍 가만히 처리할 일을 기다리고 있음)→ 버튼 탭 → 탭 이벤트가 Event queue에서 들어가 처리 시작 → Flutter가 이벤트 확인 → 렌더링 시스템이 ElevatedButton과 관련이 있음 확인 → ElevatedButton의 onPressed 실행 → onPressed는 네트워크 요청을 실행 → Future를 반환 → then을 사용하여 future를 위한 완성 핸들러 등록 → loop 완료, 이벤트 폐기
    • 특정한 이벤트를 위해 블록으로 나뉘어짐:
      • Line 1~3: 초기 위젯 생성
      • Line 4~5: 탭 이벤트
      • Line 6: 네트워크 Response 이벤트

    Reference

     

    '공부' 카테고리의 다른 글

    Swift와 Dart 문법 차이  (0) 2024.06.12
    TDD - Test Driven Development  (0) 2024.06.01
    Behavioral Patterns - Template  (0) 2024.06.01
    Behavioral Patterns - Adapter  (0) 2024.06.01
    Structural Patterns - Adapter  (0) 2024.06.01