Concepto de aislamientos en Dart

Dart se diseñó tradicionalmente para crear aplicaciones de una sola página. Y también sabemos que la mayoría de las computadoras, incluso las plataformas móviles, tienen CPU de varios núcleos. Para aprovechar todos esos núcleos, los desarrolladores tradicionalmente usan subprocesos de memoria compartida que se ejecutan simultáneamente. Sin embargo, la concurrencia de estado compartido es propensa a errores y puede dar lugar a un código complicado. En lugar de subprocesos , todo el código de Dart se ejecuta dentro de aislados . Cada aislado tiene su propio montón de memoria, lo que garantiza que no se pueda acceder al estado de ningún aislado desde ningún otro aislado.

Los aislamientos y los subprocesos son diferentes entre sí, ya que en los subprocesos se comparte la memoria, mientras que en los aislamientos no lo es. Además, los aislados hablan entre sí a través de mensajes que se pasan.

To use isolates you have to add import 'dart:isolate'; statement in your program code.

Crear un aislamiento en Dart

Para crear un aislado hacemos uso de . método spawn() en Dart.

Syntax: Isolate isolate_name = await Isolate.spawn( parameter );

Este parámetro representa el puerto que recibirá el mensaje de vuelta.

Destruyendo un aislado en Dart

Para destruir el aislado hacemos uso de . método kill() en Dart.

Syntax: isolate_name.kill( parameters );

Generalmente usamos spawn() y kill() juntos en un solo programa.

Ejemplo:  Crear un aislado en Dart.

Dart

// importing dart libraries
  
import 'dart:io';
import 'dart:async';
import 'dart:isolate';
  
// Creating geek isolate
Isolate geek;
  
void start_geek_process() async {
    
  // port for isolate to receive messages.
  ReceivePort geekReceive= ReceivePort();
  
  // Starting an isolate
  geek = await Isolate.spawn(gfg, geekReceive.sendPort);
}
  
void gfg(SendPort sendPort) {
  int counter = 0;
  
  // Printing Output message after every 2 sec.
  Timer.periodic(new Duration(seconds: 2), (Timer t) {
    // Increasing the counter
    counter++; 
      
    //Printing the output message
    stdout.writeln('Welcome to GeeksForGeeks $counter');  
  });
}
  
void stop_geek_process() {
    
  // Checking the isolate with null
  if (geek != null) {
      stdout.writeln('--------------Stopping Geek Isolate--------------');
  
      // Killing the isolate
      geek.kill(priority: Isolate.immediate);
  
      // Setting the isolate to null
      geek = null;        
  }  
}
  
// Main Function
void main() async {
  stdout.writeln('--------------Starting Geek Isolate--------------');
  
  // Starting the isolate with start_geek_process
  await start_geek_process();
  stdout.writeln('Press enter key to quit');
  
  // Whenever enter is hit the program is stopped
  await stdin.first;
  
  // Calling the stop_geek_process
  stop_geek_process();
  
  // Printing the goodbye message
  stdout.writeln('GoodBye Geek!');
  
  // Exiting the program.
  exit(0);
}

Producción:

--------------Starting Geek Isolate--------------
Press enter key to quit
Welcome to GeeksForGeeks 1
Welcome to GeeksForGeeks 2
Welcome to GeeksForGeeks 3
Welcome to GeeksForGeeks 4
Welcome to GeeksForGeeks 5
Welcome to GeeksForGeeks 6
Welcome to GeeksForGeeks 7

--------------Stopping Geek Isolate--------------
GoodBye Geek!

Presionando enter después de la séptima salida.

Publicación traducida automáticamente

Artículo escrito por aditya_taparia y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *