Nic*_*ich 5 dart dart-isolates dart-2
我正在尝试隔离,而我想知道如何让其中的一些人进行繁重的计算,当根隔离询问他们当前的计算值时,他们会“按需”响应。
据我所知,可以用作新创建的隔离的消息的唯一对象是SendPort,这意味着只有生成的隔离可以与根隔离进行通信。我尝试发送<SendPort,ReceivePort>元组,但是由于ReceivePort不是SendPort,因此被认为是非法的。
简而言之:
根<-隔离良好
根<->隔离如何?
import 'dart:async';
import 'dart:io';
import 'dart:isolate';
Stopwatch stopwatch = new Stopwatch();
main(args) async {
ReceivePort rPort = new ReceivePort();
rPort.listen((data) {
print("<root> $data received");
if (data is List) {
String action = data[0];
if (action == "register") {
(data[1] as SendPort).send(stopwatch.elapsedMilliseconds);
}
}
});
stopwatch.start();
await Isolate.spawn(elIsolate, rPort.sendPort);
print("isolate spawned in ${stopwatch.elapsedMilliseconds} msecs"); //isolate spawned in 377 msecs
}
void elIsolate(SendPort sPort) {
ReceivePort rPort = new ReceivePort();
rPort.listen((data) {
print("<Isolate> '$data' received"); //<Isolate> '387' received
});
sPort.send(["register", rPort.sendPort]);
}
Run Code Online (Sandbox Code Playgroud)
import 'dart:async';
import 'dart:io';
import 'dart:isolate';
import 'package:stream_channel/stream_channel.dart';
Stopwatch stopwatch = new Stopwatch();
main(args) async {
ReceivePort rPort = new ReceivePort();
IsolateChannel channel = new IsolateChannel.connectReceive(rPort);
channel.stream.listen((data) {
print("<root> '$data' received at ${stopwatch.elapsedMilliseconds} msecs"); //<root> 'hello world' received at 1141 msecs
channel.sink.add(stopwatch.elapsedMilliseconds);
});
stopwatch.start();
await Isolate.spawn(elIsolate, rPort.sendPort);
print("isolate spawned in ${stopwatch.elapsedMilliseconds} msecs"); //isolate spawned in 1111 msecs
}
void elIsolate(SendPort sPort) {
IsolateChannel channel = new IsolateChannel.connectSend(sPort);
channel.stream.listen((data) {
print("<Isolate> '$data' received");
});
channel.sink.add("hello world");
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
336 次 |
最近记录: |