Программирование дротиков - параллелизм

Concurrencyэто выполнение нескольких последовательностей команд одновременно. Это предполагает одновременное выполнение нескольких задач.

Дарт использует Isolatesкак инструмент для параллельных работ. Вdart:isolate package - это решение Dart, позволяющее использовать однопоточный код Dart и позволяющее приложению более широко использовать доступное оборудование.

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

пример

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

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 and 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 может порождать новый isolate от запуска кода, как код Java или C # может запустить новый поток.

Isolates отличаются от потоков тем, что isolateесть своя память. Невозможно разделить переменную междуisolates- единственный способ общаться между isolates через передачу сообщений.

Note - Приведенный выше вывод будет отличаться для разных конфигураций оборудования и операционной системы.

Изолировать от будущего

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