Flutter є однопотоковим, але він здатний виконувати багатопотокові речі, використовуючи ізоляти (багато процесів).
Коли Dart запускається, там буде один основний ізолят (потік). Це основний виконуючий потік програми, також званий потоком UI.
У простих додатках Flutter ви завжди будете використовувати тільки один ізолят, і ваш додаток буде працювати гладко.
Ізоляти-це:
- Багатопотоковість у Dart.
- Потоки не діляться пам'яттю між собою.
- Для нового потоку виділяється нова пам'ять і нове ядро.
- Потоки спілкуються між собою за допомогою повідомлень.
- Код оброблюється паралельно.
Ізоляти підходять, якщо у вас є тривале завдання, яке ви хочете вирішити, не зависаючи в інтерфейсі користувача. Продемонструю використання ізоляторів у невеликому додатку.
Ми створюємо новий додаток flutter
Щоб продемонструвати ізоляти в дії, давайте створимо просту анімацію, а також додамо listener до нашого _animationController, щоб зробити цикл анімації.
У дереві віджетів ми будемо анімувати зображення, завантажене активами. AnimatedBuilder перефарбує нашу картинку, а ScaleTransition буде відповідати за збільшення картинки і необхідний для звільнення анімації з пам'яті в методі dispose().
Тепер ми створимо клас Isolates в якому будемо використовувати нашу анімацію і ізоляти.
В якості розрахунків будемо використовувати функцію Fibonacci, метод заснований на послідовності чисел. Щоб використовувати цей метод в іншому потоці, він повинен бути глобальною функцією.
Натиснувши кнопку mainIsolateButton, ми запустимо метод Fibonacci в головному потоці і відобразимо результат в snakBar
Натиснувши кнопку secondIsolateButton, ми запускаємо метод Fibonacci в другому потоці. У цьому додатку ми використовували функцію compute (). Функція compute () запускає дорогі функції у фоновому режимі і повертає результат. Ви також можете використовувати Isolate.spawn() для роботи з багатопоточністю.
Тепер давайте запустимо наш додаток
Видео
Запустивши додаток, ми постійно маємо анімацію, що працює в основному потоці, і якщо ми запустимо метод Fibonacci в тому ж потоці, то побачимо затримку нашого UI. Коли ми обробляємо наш метод в іншому потоці, ми виділяємо нову пам'ять і навіть інше ядро, завдяки чому наш користувальницький інтерфейс працює плавно.
Якщо ми протестуємо продуктивність програми, то побачимо наступні цифри.
в основному ізоляті - UI 7235.3 ms / frame, сер 66.0 ms / frame.
у другому ізоляті ми маємо - UI 28.9 ms / frame, сер 6.6 ms / frame.
Існує кілька залежностей для роботи з багатопоточністю:
flutter_isolate
isolate
isolate_executor
Офіційна документація про ізоляти:
https://api.flutter.dev/flutter/dart-isolate/Isolate-class.html
https://api.flutter.dev/flutter/foundation/compute.html