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