简单来说,并发意味着应用程序一次在多个任务中取得进展。在正常的应用程序或程序中,每一行代码都按顺序执行,一个接一个。但是使用并发的程序可以同时运行两个函数。如果一个耗时的任务与其他任务同时执行,可以提高程序的吞吐量和交互性。
注意:并发程序可能会也可能不会并行执行,这取决于您的机器(单核/多核)
如果您在单核系统中尝试并发,您的 CPU 只会使用调度算法并在任务之间切换,因此实际上单核 CPU 中的任务会同时进行,但不会有两个任务同时执行。
Dart的并发:
在Dart,我们可以通过使用 Isolates 来实现并发。顾名思义,隔离是隔离运行的代码块。如果您熟悉线程,您可能会认为线程类似于隔离。尽管它们提供相同的功能,但它们之间存在内部差异。在一个进程中,所有线程共享一个公共内存,另一方面,isolates 是独立的 worker,它们不共享内存,而是通过在通道上传递消息来互连。
Dart提供了dart:isolate 包来在我们的程序中使用隔离。
句法:
Isolate.spawn(function_name,'message_to_pass');
隔离有助于程序利用开箱即用的多核微处理器。没有办法在隔离之间共享变量——隔离之间通信的唯一方法是通过消息传递。
示例 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');
}
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");
}
Dart
import 'dart:isolate';
Future 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");
}
输出:
Normal Print 1
Normal Print 2
Normal Print 3
For!! From Isolate
Geeks!! From Isolate
Geeks!! From Isolate
您的输出可能会有所不同。
有时,如果您有一个非常复杂的函数在 Isolate 上运行,那么该函数可能无法完全执行。
示例 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");
}
输出:
Hello Main 1
Hello Main 2
Hello Main 3
Isolate Function 0
Isolate Function 1
Isolate Function 2
Isolate Function 3
在这里,我有一个在 Isolate 上运行的 for 循环,但我的 for 循环只运行了 4 次迭代,这是因为当我的 for 循环进行迭代时,主函数到达了它的最后执行行。所以程序杀死了正在运行的隔离函数。
注意:您的输出可能会有所不同。
如果您希望隔离函数完全运行,则可以使用-异步编程:期货、异步、等待
示例 3:
Dart
import 'dart:isolate';
Future 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");
}
输出:
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
如果您想了解更多关于期货Dart:在Dart异步编程