📜  Dart中隔离的概念

📅  最后修改于: 2021-09-02 05:37:45             🧑  作者: Mango

Dart传统上旨在创建单页应用程序。而且我们也知道,大多数计算机,甚至移动平台,都有多核 CPU。为了利用所有这些内核,开发人员传统上使用并发运行的共享内存线程。但是,共享状态并发很容易出错,并且会导致代码复杂。所有Dart代码都在隔离内运行,而不是线程。每个隔离都有自己的内存堆,确保没有隔离的状态可以从任何其他隔离访问。

隔离区线程彼此不同,因为在线程内存中是共享的,而在隔离区中则不是。此外,通过传递消息来隔离彼此的交谈。

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

在Dart创建隔离

为了创建一个隔离,我们使用 . Dart的spawn()方法。

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

此参数表示将接收回消息的端口。

在Dart摧毁隔离

为了破坏隔离,我们使用 . Dart的kill()方法。

Syntax: isolate_name.kill( parameters );

我们通常在一个程序中一起使用spawn()kill()

示例:在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);
}


输出:

--------------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!

在第七次输出后按回车键。