isolate
在Dart中,Isolate是一种并发模型,用于执行与主应用程序隔离的代码。Isolate提供了一种方式来创建独立的执行上下文,使得可以在多个Isolate之间并发执行代码,每个Isolate都有自己的内存空间,它们之间不会共享内存
api
ReceivePort.listen 接收数据 ReceivePort.sendPort 发送数据 Isolate.spawn 创建新的 并且可以传入参数
交互流程
- 在子isolate向主isolate中发送数据 主isolate中创建一个ReceivePort, 把主ReceivePort.SendPort传入到子isolate中用于向主isoalte发送数据,并且通过ReceivePort.listen 接收数据
- 在主isolate向子isolate中发送数据 创建一个子isolate,并重新创建一个子ReceivePort,并且通过ReceivePort.listen 接收数据,并通过主的SendPort发送子的ReceivePort.SendPort到主isolate,用于在主isolate中向子isolate发送数据
- 通过自己的ReceivePort来接收数据,把自己的SendPort传递给需要交互的Isolate中
code
void main() async {
ReceivePort mainReceivePort = ReceivePort();
Isolate isolate =
await Isolate.spawn(isolateFunction, mainReceivePort.sendPort);
mainReceivePort.listen((message) {
print('Received message: $message');
if (message is SendPort) {
///拿到SendPort了,可以向子isolate发送数据了
message.send("可以向子isolate发送数据了");
}
});
///在特定的情况杀死
isolate.kill(priority: Isolate.immediate);
}
///List<dynamic> args 多个参数
///该方法需要是顶级函数
void isolateFunction(SendPort sendPort) {
ReceivePort receivePort = ReceivePort();
///发送到主Isolate,然后就可以通过子sendPort发送数据了
sendPort.send(receivePort.sendPort);
sendPort.send('Message from Isolate');
receivePort.listen((message) {
print('Received message: $message');
});
}