Programação Dart - Simultaneidade
Concurrencyé a execução de várias sequências de instruções ao mesmo tempo. Envolve a execução de mais de uma tarefa simultaneamente.
Dart usa Isolatescomo uma ferramenta para fazer trabalhos em paralelo. odart:isolate package é a solução da Dart para obter código Dart de thread único e permitir que o aplicativo faça maior uso do hardware disponível.
Isolates, como o nome sugere, são unidades isoladas de código em execução. A única maneira de enviar dados entre eles é passando mensagens, como a maneira como você passa mensagens entre o cliente e o servidor. Aisolate ajuda o programa a tirar proveito de microprocessadores multicore prontos para uso.
Exemplo
Vamos dar um exemplo para entender melhor esse conceito.
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');
}
Aqui o spawn método do Isolate classe facilita a execução de uma função, foo, em paralelo com o resto do nosso código. ospawn função leva dois parâmetros -
- a função a ser gerada, e
- um objeto que será passado para a função gerada.
Caso não haja nenhum objeto a ser passado para a função gerada, pode ser passado um valor NULL.
As duas funções (foo and main)pode não ser necessariamente executado na mesma ordem todas as vezes. Não há garantia de quandofoo estará executando e quando main()estará em execução. A saída será diferente a cada vez que você executar.
Produto 1
execution from main1
execution from main2
execution from main3
execution from foo ... the message is :Hello!!
Produto 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!!
Pelas saídas, podemos concluir que o código Dart pode gerar um novo isolate de executar código como o código Java ou C # pode iniciar um novo thread.
Isolates diferem dos tópicos porque um isolatetem sua própria memória. Não há como compartilhar uma variável entreisolates—A única forma de comunicação entre isolates é por meio de passagem de mensagens.
Note - A saída acima será diferente para diferentes configurações de hardware e sistema operacional.
Isole v / s Futuro
Fazer um trabalho computacional complexo de forma assíncrona é importante para garantir a capacidade de resposta dos aplicativos. Dart Future é um mecanismo para recuperar o valor de uma tarefa assíncrona após sua conclusão, enquanto Dart Isolates são uma ferramenta para abstrair o paralelismo e implementá-lo em uma base prática de alto nível.