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

More like this

Get in touch

Зв'язатися з нами

Frankfurt am Main, Germany (Sales)

60354

Eckenheimer Schulstraße, 20

+38 (098) 630-49-85

info@a5.ua

Харків, Україна

61023

вул. Трінклера, 9

+38 (050) 908-31-07

info@a5.ua

Burgas, Bulgaria (Development)

8008

бул. „Транспортна“ 15, Northern Industrial Zone

+359 877 350129

info@a5.ua