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!
在第七次输出后按回车键。