Учебники

Дартс программирование — параллелизм

Параллелизм — это выполнение нескольких последовательностей команд одновременно. Это включает в себя выполнение более чем одной задачи одновременно.

Дарт использует изоляты как инструмент для параллельного выполнения работ. Пакет dart: isolate представляет собой решение Dart для получения однопоточного кода Dart и позволяет приложению более широко использовать доступное аппаратное обеспечение.

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

пример

Давайте рассмотрим пример, чтобы лучше понять эту концепцию.

Live Demo

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 — это инструмент для абстрагирования параллелизма и его практической реализации на высоком уровне.