Флаттер изолят против будущего - PullRequest
0 голосов
/ 25 сентября 2018

Я могу неправильно понять, что такое Изолят и Будущее, пожалуйста, помогите мне прояснить это.Вот мое понимание обеих тем.

Изолировать: Изолировать Выполнить код в своем собственном цикле событий, и каждое событие может запускать небольшие задачи во вложенной очереди микрозадач.

Future: Future используется для представления потенциального значения или ошибки, которая будет доступна в будущем.

Мои заблуждения таковы:

  1. Док говорит, что у Isolate есть свой цикл?Я чувствую, что наличие собственной очереди событий имеет для меня больше смысла, я не прав?

  2. Будущее асинхронно работает на главном изоляторе?Я предполагаю, что будущая задача действительно была помещена в конец очереди событий, так что если она будет выполняться циклом в будущем.Поправьте меня, если я неправ.

  3. Зачем использовать Isolate, когда есть будущее?Я видел несколько примеров использования Isolate для некоторых тяжелых задач вместо Future.Но почему?Это имеет смысл только для меня, когда будущее выполняется асинхронно в основной очереди изолята.

Спасибо, ребята, ценю ваш ответ.

Ответы [ 3 ]

0 голосов
/ 25 сентября 2018

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

Dart способен порождать автономные процессы, называемые Isolates (веб-работники в dart2js), которые не разделяют память, когда основнойПрограмма, но может асинхронно, в другом процессе (фактически, своего рода поток) может выполнять вычисления, не блокируя основной поток.

Будущее запускается внутри Isolate, который вызвал его, а необязательно главный изолят.

Я рекомендую эту статью , которая имеет лучшее объяснение, чем я.

0 голосов
/ 25 сентября 2018

В одном предложении мы могли бы сказать:

Изоляты : Дротик однопоточный, но он способен выполнять многопоточную обработку с использованием Изоляторов (много процессов).

Future : Future - это результат, который возвращается, когда дротик завершил асинхронную работу.Работа, как правило, выполняется в одном потоке.

0 голосов
/ 25 сентября 2018

A Future - дескриптор, который позволяет получать уведомления о завершении асинхронного выполнения.Асинхронное выполнение использует очередь событий, и код выполняется одновременно в одном потоке.

https://webdev.dartlang.org/articles/performance/event-loop

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

Вы можетезапустить дополнительные изоляторы, которые обычно запускаются в другом потоке.Изолят может быть загружен из того же кода Dart, с которого был запущен корневой изолят (с точкой входа, отличной от main() https://api.dartlang.org/stable/2.0.0/dart-isolate/Isolate/spawn.html), или с другим кодом Dart (загружен из некоторого файла Dart или URL https://api.dartlang.org/stable/2.0.0/dart-isolate/Isolate/spawnUri.html).

Изоляты не имеют общего состояния и могут общаться только с помощью передачи сообщений (SendPort / ReceivePort). Каждый изолят имеет свою собственную очередь событий.

https://webdev.dartlang.org/articles/performance/event-loop

...