La concurrencia en términos simples significa que la aplicación está progresando en más de una tarea a la vez. En una aplicación o programa normal, cada línea de código se ejecuta secuencialmente, una tras otra. Pero los programas que usan concurrencia pueden ejecutar dos funciones simultáneamente. Si una tarea que requiere mucho tiempo se realiza simultáneamente con otras tareas, se puede mejorar el rendimiento y la interactividad del programa.
Nota: Los programas concurrentes pueden o no ejecutarse en paralelo, dependiendo de su máquina (núcleo único/núcleo múltiple)
Si prueba la concurrencia en un sistema de un solo núcleo, su CPU solo usará un algoritmo de programación y cambiará entre las tareas, por lo que prácticamente en las tareas de la CPU de un solo núcleo progresarán simultáneamente, pero no habrá dos tareas ejecutándose al mismo tiempo.
Concurrencia en Dart:
En Dart, podemos lograr la concurrencia mediante el uso de Isolates. Como su nombre indica, los aislamientos son bloques de códigos en ejecución aislados. Si está familiarizado con los subprocesos, puede pensar que los subprocesos son similares a los aislados. Aunque proporcionan la misma funcionalidad, existe una diferencia interna entre ellos. En un proceso, todos los subprocesos comparten una memoria común; por otro lado, los aislados son trabajadores independientes que no comparten memoria, sino que se interconectan pasando un mensaje a través de los canales.
Dart proporciona el dart: paquete de aislamiento para usar los aislamientos en nuestro programa.
Sintaxis:
Isolate.spawn(function_name,'message_to_pass');
Un aislado ayuda al programa a aprovechar los microprocesadores multinúcleo listos para usar. No hay forma de compartir una variable entre aislados: la única forma de comunicarse entre aislados es mediante el paso de mensajes.
Ejemplo 1:
Dart
import 'dart:isolate'; void function_name(var message){ print('${message} From Isolate'); } void main(){ Isolate.spawn(function_name,'Geeks!!'); Isolate.spawn(function_name,'For!!'); Isolate.spawn(function_name,'Geeks!!'); print('Normal Print 1'); print('Normal Print 2'); print('Normal Print 3'); }
Producción:
Normal Print 1 Normal Print 2 Normal Print 3 For!! From Isolate Geeks!! From Isolate Geeks!! From Isolate
Su salida puede diferir.
A veces, si tiene una función muy compleja ejecutándose en Isolate, es posible que esa función no se ejecute por completo.
Ejemplo 2:
Dart
import 'dart:isolate'; void isofunction(var msg) { for (int i = 0; i < 7; i++) { print(msg + "$i"); } } void main() async { Isolate.spawn(isofunction, "Isolate Function "); print("Hello Main 1"); print("Hello Main 2"); print("Hello Main 3"); }
Producción:
Hello Main 1 Hello Main 2 Hello Main 3 Isolate Function 0 Isolate Function 1 Isolate Function 2 Isolate Function 3
Aquí tengo un bucle for ejecutándose en Isolate, pero mi bucle for se ejecuta solo durante 4 iteraciones, eso es porque cuando mi bucle for itera, la función principal llega a su última línea de ejecución. por lo que el programa elimina la función de aislamiento en ejecución.
Nota: Su salida puede diferir.
Si desea que su función de aislamiento se ejecute por completo, puede usar: Programación asíncrona: futuros, asíncrono, espera
Ejemplo 3:
Dart
import 'dart:isolate'; Future<void> isofunction(var msg) async { for (int i = 0; i < 7; i++) { print(msg + "$i"); } } void main() async { await Isolate.spawn(isofunction, "Isolate Function "); // Isolate Function print("Hello Main 1"); print("Hello Main 2"); print("Hello Main 3"); }
Producción:
Hello Main 1 Hello Main 2 Hello Main 3 Isolate Function 0 Isolate Function 1 Isolate Function 2 Isolate Function 3 Isolate Function 4 Isolate Function 5 Isolate Function 6
Si desea obtener más información sobre Futures in Dart: Programación asíncrona en Dart
Publicación traducida automáticamente
Artículo escrito por abhishekmule y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA