SlideShare a Scribd company logo
1 of 45
Download to read offline
Event Loop.
Platform Channels
Илья Вирник, Flutter Team Lead
Зачем нам это всё
2
〉Выполнение асинхронного кода, а также многопоточное
программирование в Dart’е радикально отличается от Swift/Kotlin


〉Для разработки полноценных программ необходимо уметь работать с
асинхронным и многопоточным кодом
Зачем нам это всё
3
〉Flutter сам по себе — UI-фреймворк. Многие возможности
операционных систем и смартфонов ему недоступны


〉Для разработки сложных приложений почти всегда необходимо
взаимодействовать с платформой, для этого во Flutter есть специальные
механизмы
О чём будем говорить
Future и что он из себя
представляет
Как устроен Dart Event Loop
Что такое PlatformChannel
Какими бывают PlatformChannel’ы
00 ⎮
01 ⎮
02 ⎮
03 ⎮
Future и что он из себя представляет
00
А также что же там внутри особенного
Что такое Future
6
Класс Future — generic обёртка над результатом выполнения
асинхронной операции


У Future есть 3 состояния:


〉Uncompleted — незавершённое, операция ещё не запущена или в
процессе выполнения


〉Completed with result — операция завершена успешно


〉Completed with error — операция завершена с ошибкой
Как устроен Dart Event Loop
01
И что это вообще за зверь такой
Как устроен Dart Event Loop
8
Dart — однопоточный язык


Главный поток в Dart’е — он же main isolate —


поток, на котором выполняются все задачи,


синхронные и асинхронные
Main Isolate
UI
Как устроен Dart Event Loop
9
Каждый изолят содержит Event Loop — это вечный цикл,


выполняющий все поступающие в изолят задачи


Есть 2 FIFO очереди задач: обычные и microtasks


Очередь microtasks имеет приоритет над обычными и опустошается
первой


Обычная очередь задач начинает выполнять задачи последовательно
после выполнения microtasks
Как устроен Dart Event Loop
10
3 2 1
Event Queue
Event Loop
1.Жест на экране


2.Ввели символ


3.Запустили таймер
IO, gestures, timers, etc.
Как устроен Dart Event Loop
11
Event Queue
Event Loop
В очереди событий есть события
Как устроен Dart Event Loop
12
Event Queue
Event Loop
Еvent Loop забирает


их по одному на выполнение
Как устроен Dart Event Loop
13
Event Queue
Event Loop
Задание выполнено
После завершения переходит к следующему
Как устроен Dart Event Loop
14
Event Queue
Event Loop
Как устроен Dart Event Loop
15
Event Queue
Event Loop
Задание выполнено
Как устроен Dart Event Loop
16
Event Queue
Event Loop
Как устроен Dart Event Loop
17
Event Queue
Event Loop
Задание выполнено
Как устроен Dart Event Loop
18
Event Queue


Пустая
Event Loop
Ожидаем следующие события
А что с Future?
Как устроен Dart Event Loop
20
Future instance
Event Loop
Uncompleted State
Как устроен Dart Event Loop
21
Event Loop
Event Queue


Пустая
Completed with Result Completed with Error
Future instance
Or
Что такое Future
22
Пример синхронного и асинхронного выполнения операций












〉Источник примера и просто хорошая статья
Как устроен Dart Event Loop
23
Dart — многопоточный язык


В общем случае в приложении на Dart


может быть несколько изолятов
Custom
Custom
Custom Task


Messa
Main
UI
Как устроен Dart Event Loop
24
Isolate/изолят — поток в Dart’е


Каждый изолят имеет выделенную память, которая не делится с
другими изолятами


Каждый изолят имеет собственный Event Loop


Общение между изолятами организуется через сообщения. Данные
каждый раз глубоко копируются, поскольку память у каждого своя


Создание изолята — достаточно дорогая операция, не стоит этим
злоупотреблять
Как там дела с изолятами
Как устроен Dart Event Loop
26
Почитать дома
Что такое PlatformChannel
03
И с чем его едят
Механизм взаимодействия


платформоспецифичного


кода и Dart кода
Platform Channel
29
Двусторонний канал связи Dart <=> Native


Вызовы асинхронны


Каждый канал должен иметь уникальный идентфикатор
Какими бывают PlatformChannel’ы
04
И как с ними работать
BinaryMessenger
31
Byte Buffer payload


Обязательный ответ (хотя бы null)
BasicMessageChannel
32
Под капотом BinaryMessenger
BasicMessageChannel
33
Под капотом BinaryMessenger


Умеют в базовые типы при помощи codec’ов
MethodChannel
34
Всё так же BinaryMessenger
MethodChannel
35
Всё так же BinaryMessenger


Тоже использует codec MethodCall
MethodChannel
36
Plugin MethodChannel Native
Flutter App
Вызываем через MethodChannel
Event Channel
38
Канал передачи потока событий из натива во Flutter


Работает как обычный Dart Stream
Стримим в EventChannel
А если хочу встроить вьюху?
Platform View
41
Платформенная View оборачивается во Flutter Widget и встраивается
как обычный виджет в дерево


Весь жизненный цикл View и её перерисовки при этом происходят на
стороне платформы


View может занимать любую часть экрана, одновременно их может
быть несколько
Встраиваем вьюхи
Вместо итога
Что почитать
44
Про Dart Event Loop и Isolates


Про Platform Channels, документация


Дока про создание плагина


Большая статья про Platform Channels и их устройство под капотом


Создание платформенной вью во Флаттере раз,


Создание платформенной вью два


Pigeon


Документация по работе с FFI
Q&A
Илья Вирник
i-virnik@yandex-team.ru

More Related Content

What's hot

게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화Seungmo Koo
 
InfiRay Thermal E3 Max V2 Instruction Manual - Optics Trade
InfiRay Thermal E3 Max V2 Instruction Manual - Optics TradeInfiRay Thermal E3 Max V2 Instruction Manual - Optics Trade
InfiRay Thermal E3 Max V2 Instruction Manual - Optics TradeOptics-Trade
 
Golang - Overview of Go (golang) Language
Golang - Overview of Go (golang) LanguageGolang - Overview of Go (golang) Language
Golang - Overview of Go (golang) LanguageAniruddha Chakrabarti
 
IEnumerator란 무엇인가?
IEnumerator란 무엇인가?IEnumerator란 무엇인가?
IEnumerator란 무엇인가?Jungsoo Park
 
Test Automation Framework using Cucumber BDD overview (part 1)
Test Automation Framework using Cucumber BDD overview (part 1)Test Automation Framework using Cucumber BDD overview (part 1)
Test Automation Framework using Cucumber BDD overview (part 1)Mindfire Solutions
 
Google I/O 2011, Android Accelerated Rendering
Google I/O 2011, Android Accelerated RenderingGoogle I/O 2011, Android Accelerated Rendering
Google I/O 2011, Android Accelerated RenderingRomain Guy
 
Compute shader
Compute shaderCompute shader
Compute shaderQooJuice
 
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기Yongha Kim
 
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기Jaeseung Ha
 
초보자를 위한 Git & GitHub
초보자를 위한 Git & GitHub초보자를 위한 Git & GitHub
초보자를 위한 Git & GitHubYurim Jin
 
Graphics programming in open gl
Graphics programming in open glGraphics programming in open gl
Graphics programming in open glArvind Devaraj
 
Behavior Driven Development (BDD)
Behavior Driven Development (BDD)Behavior Driven Development (BDD)
Behavior Driven Development (BDD)Ajay Danait
 
How to come up with new research ideas
How to come up with new research ideasHow to come up with new research ideas
How to come up with new research ideasJia-Bin Huang
 
Computer science for children
Computer science for childrenComputer science for children
Computer science for childrenPaul Burdell
 
Mocking your Microservices with Mock Server
Mocking your Microservices with Mock ServerMocking your Microservices with Mock Server
Mocking your Microservices with Mock ServerJaap Coomans
 
이원, 절차적 지형과 월드 머신, NDC2011
이원, 절차적 지형과 월드 머신, NDC2011이원, 절차적 지형과 월드 머신, NDC2011
이원, 절차적 지형과 월드 머신, NDC2011devCAT Studio, NEXON
 
Ndc2012 최지호 텍스쳐 압축 기법 소개
Ndc2012 최지호 텍스쳐 압축 기법 소개Ndc2012 최지호 텍스쳐 압축 기법 소개
Ndc2012 최지호 텍스쳐 압축 기법 소개Jiho Choi
 

What's hot (20)

게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
 
정점 변환
정점 변환정점 변환
정점 변환
 
InfiRay Thermal E3 Max V2 Instruction Manual - Optics Trade
InfiRay Thermal E3 Max V2 Instruction Manual - Optics TradeInfiRay Thermal E3 Max V2 Instruction Manual - Optics Trade
InfiRay Thermal E3 Max V2 Instruction Manual - Optics Trade
 
Golang - Overview of Go (golang) Language
Golang - Overview of Go (golang) LanguageGolang - Overview of Go (golang) Language
Golang - Overview of Go (golang) Language
 
IEnumerator란 무엇인가?
IEnumerator란 무엇인가?IEnumerator란 무엇인가?
IEnumerator란 무엇인가?
 
Test Automation Framework using Cucumber BDD overview (part 1)
Test Automation Framework using Cucumber BDD overview (part 1)Test Automation Framework using Cucumber BDD overview (part 1)
Test Automation Framework using Cucumber BDD overview (part 1)
 
Google I/O 2011, Android Accelerated Rendering
Google I/O 2011, Android Accelerated RenderingGoogle I/O 2011, Android Accelerated Rendering
Google I/O 2011, Android Accelerated Rendering
 
Compute shader
Compute shaderCompute shader
Compute shader
 
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
 
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
 
Bit flipping attack on aes cbc - ashutosh ahelleya
Bit flipping attack on aes cbc -	ashutosh ahelleyaBit flipping attack on aes cbc -	ashutosh ahelleya
Bit flipping attack on aes cbc - ashutosh ahelleya
 
초보자를 위한 Git & GitHub
초보자를 위한 Git & GitHub초보자를 위한 Git & GitHub
초보자를 위한 Git & GitHub
 
Graphics programming in open gl
Graphics programming in open glGraphics programming in open gl
Graphics programming in open gl
 
Behavior Driven Development (BDD)
Behavior Driven Development (BDD)Behavior Driven Development (BDD)
Behavior Driven Development (BDD)
 
How to come up with new research ideas
How to come up with new research ideasHow to come up with new research ideas
How to come up with new research ideas
 
Computer science for children
Computer science for childrenComputer science for children
Computer science for children
 
Mocking your Microservices with Mock Server
Mocking your Microservices with Mock ServerMocking your Microservices with Mock Server
Mocking your Microservices with Mock Server
 
이원, 절차적 지형과 월드 머신, NDC2011
이원, 절차적 지형과 월드 머신, NDC2011이원, 절차적 지형과 월드 머신, NDC2011
이원, 절차적 지형과 월드 머신, NDC2011
 
Lock free queue
Lock free queueLock free queue
Lock free queue
 
Ndc2012 최지호 텍스쳐 압축 기법 소개
Ndc2012 최지호 텍스쳐 압축 기법 소개Ndc2012 최지호 텍스쳐 압축 기법 소개
Ndc2012 최지호 텍스쳐 압축 기법 소개
 

Similar to Dart event loop; platform channels

Олег Антонян
Олег АнтонянОлег Антонян
Олег АнтонянForkConf
 
Programming Guide
Programming GuideProgramming Guide
Programming Guideguest63e09c
 
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?Cisco Russia
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Yauheni Akhotnikau
 
Nikita Galkin "5 production Node.js stories"
Nikita Galkin "5 production Node.js stories"Nikita Galkin "5 production Node.js stories"
Nikita Galkin "5 production Node.js stories"OdessaJS Conf
 
Лекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GILЛекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GILRoman Brovko
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language RuntimeSQALab
 
Evgeny Rybak Presentation
Evgeny Rybak PresentationEvgeny Rybak Presentation
Evgeny Rybak Presentationsef2009
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS Pavel Tsukanov
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаRoman Dvornov
 
Стек протоколов для IoT. Пример использования SNMP
Стек протоколов для IoT. Пример использования SNMPСтек протоколов для IoT. Пример использования SNMP
Стек протоколов для IoT. Пример использования SNMPIntersog
 
IoT Protocols #iotconfua
IoT Protocols #iotconfuaIoT Protocols #iotconfua
IoT Protocols #iotconfuaAndy Shutka
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программированиеPython Meetup
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?etyumentcev
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаSergey Platonov
 

Similar to Dart event loop; platform channels (20)

Олег Антонян
Олег АнтонянОлег Антонян
Олег Антонян
 
Programming Guide
Programming GuideProgramming Guide
Programming Guide
 
Lirc или домашний медиацентр
Lirc или домашний медиацентрLirc или домашний медиацентр
Lirc или домашний медиацентр
 
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?
 
Async Python
Async PythonAsync Python
Async Python
 
Nikita Galkin "5 production Node.js stories"
Nikita Galkin "5 production Node.js stories"Nikita Galkin "5 production Node.js stories"
Nikita Galkin "5 production Node.js stories"
 
Лекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GILЛекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GIL
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language Runtime
 
Evgeny Rybak Presentation
Evgeny Rybak PresentationEvgeny Rybak Presentation
Evgeny Rybak Presentation
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
 
Theme 07
Theme 07Theme 07
Theme 07
 
Стек протоколов для IoT. Пример использования SNMP
Стек протоколов для IoT. Пример использования SNMPСтек протоколов для IoT. Пример использования SNMP
Стек протоколов для IoT. Пример использования SNMP
 
IoT Protocols #iotconfua
IoT Protocols #iotconfuaIoT Protocols #iotconfua
IoT Protocols #iotconfua
 
IoT Conf UA 2016
IoT Conf UA 2016IoT Conf UA 2016
IoT Conf UA 2016
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программирование
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?
 
Multithreading in go
Multithreading in goMultithreading in go
Multithreading in go
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладка
 

Dart event loop; platform channels