일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- isolate
- builder
- weatherkit
- LifeCycle
- WWDC24
- uikit
- SampleApp
- concurrency
- WiFi
- factory
- EventLoop
- state
- philipshue
- OpenAI
- GIT
- dartz
- Xcode
- Architecture
- swift
- tuist
- 문법
- Adapter
- AppleDeveloper
- singleton
- dart
- designpattern
- iot
- flutter
- SwiftUI
- network
Archives
- Today
- Total
Jaebi의 Binary는 호남선
Flutter - Isolate & Event Loop 본문
목차
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를 통해서)
- 계산량이 많아서 main isolate에서 프레임을 낮추는 경우:
- 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 |