Параллелизм — это выполнение нескольких последовательностей команд одновременно. Это включает в себя выполнение более чем одной задачи одновременно.
Дарт использует изоляты как инструмент для параллельного выполнения работ. Пакет dart: isolate представляет собой решение Dart для получения однопоточного кода Dart и позволяет приложению более широко использовать доступное аппаратное обеспечение.
Изоляты , как следует из названия, являются изолированными единицами выполняющегося кода. Единственный способ передачи данных между ними — это передача сообщений, например, как вы передаете сообщения между клиентом и сервером. Изолят помогает программе использовать преимущества многоядерных микропроцессоров из коробки.
пример
Давайте рассмотрим пример, чтобы лучше понять эту концепцию.
import 'dart:isolate'; void foo(var message){ print('execution from foo ... the message is :${message}'); } void main(){ Isolate.spawn(foo,'Hello!!'); Isolate.spawn(foo,'Greetings!!'); Isolate.spawn(foo,'Welcome!!'); print('execution from main1'); print('execution from main2'); print('execution from main3'); }
Здесь метод spawn класса Isolate облегчает запуск функции foo параллельно с остальной частью нашего кода. Функция spawn принимает два параметра —
- функция, которая будет порождена, и
- объект, который будет передан в порожденную функцию.
Если нет объекта для передачи в порожденную функцию, ему может быть передано значение NULL.
Две функции (foo и main) могут не обязательно каждый раз запускаться в одном и том же порядке. Нет никакой гарантии относительно того, когда foo будет выполняться и когда main () будет выполняться. Результат будет отличаться при каждом запуске.
Выход 1
execution from main1 execution from main2 execution from main3 execution from foo ... the message is :Hello!!
Выход 2
execution from main1 execution from main2 execution from main3 execution from foo ... the message is :Welcome!! execution from foo ... the message is :Hello!! execution from foo ... the message is :Greetings!!
Исходя из результатов, мы можем заключить, что код Dart может породить новый изолят от выполняющегося кода, как способ, которым код Java или C # может начать новый поток.
Изоляты отличаются от потоков тем, что изолят имеет свою собственную память. Невозможно разделить переменную между изолятами — единственный способ связи между изолятами — через передачу сообщений.
Примечание. Приведенный выше вывод будет различным для разных конфигураций оборудования и операционной системы.
Изолировать v / s Будущее
Выполнение сложной вычислительной работы асинхронно важно для обеспечения отзывчивости приложений. Dart Future — это механизм извлечения значения асинхронной задачи после ее завершения, в то время как Dart Isolates — это инструмент для абстрагирования параллелизма и его практической реализации на высоком уровне.