Programmazione Dart - Concorrenza
Concurrencyè l'esecuzione di più sequenze di istruzioni contemporaneamente. Implica l'esecuzione simultanea di più attività.
Dart utilizza Isolatescome strumento per fare lavori in parallelo. Ildart:isolate package è la soluzione di Dart per prendere codice Dart a thread singolo e consentire all'applicazione di fare un uso maggiore dell'hardware disponibile.
Isolates, come suggerisce il nome, sono unità isolate di codice in esecuzione. L'unico modo per inviare dati tra di loro è passare i messaggi, come il modo in cui si passano i messaggi tra il client e il server. Unisolate aiuta il programma a sfruttare immediatamente i microprocessori multicore.
Esempio
Facciamo un esempio per capire meglio questo concetto.
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');
}
Qui, il spawn metodo del Isolate class facilita l'esecuzione di una funzione, foo, parallelamente al resto del nostro codice. Ilspawn la funzione accetta due parametri:
- la funzione da generare e
- un oggetto che verrà passato alla funzione generata.
Nel caso in cui non ci siano oggetti da passare alla funzione generata, può essere passato un valore NULL.
Le due funzioni (foo and main)potrebbe non essere necessariamente eseguito nello stesso ordine ogni volta. Non vi è alcuna garanzia su quandofoo sarà in esecuzione e quando main()sarà in esecuzione. L'output sarà diverso ogni volta che esegui.
Uscita 1
execution from main1
execution from main2
execution from main3
execution from foo ... the message is :Hello!!
Uscita 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!!
Dagli output, possiamo concludere che il codice Dart può generare un nuovo file isolate dall'esecuzione di codice come il modo in cui il codice Java o C # può avviare un nuovo thread.
Isolates differiscono dai thread in quanto un file isolateha una sua memoria. Non c'è modo di condividere una variabile traisolates—L'unico modo per comunicare tra di loro isolates avviene tramite passaggio di messaggi.
Note - L'output di cui sopra sarà diverso per diverse configurazioni di hardware e sistema operativo.
Isola il futuro
L'esecuzione di un lavoro di calcolo complesso in modo asincrono è importante per garantire la reattività delle applicazioni. Dart Future è un meccanismo per recuperare il valore di un'attività asincrona dopo che è stata completata, mentre Dart Isolates sono uno strumento per astrarre il parallelismo e implementarlo su una base pratica di alto livello.