本节目标
环境
isolate
在Dart中实现并发可以用Isolate,它是类似于线程(thread)但不共享内存的独立运行的worker,是一个独立的Dart程序执行环境。其实默认环境就是一个main isolate。
在Dart语言中,所有的Dart代码都运行在某个isolate中,代码只能使用所属isolate的类和值。不同的isolate可以通过port发送message进行交流。
示意图
ReceivePort
创建入口点
Isolate.spawn
连接进程
SendPort.send
发送消息
echo 例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| import 'dart:async'; import 'dart:isolate';
main() async { var receivePort = new ReceivePort(); await Isolate.spawn(echo, receivePort.sendPort);
var sendPort = await receivePort.first; var msg = await sendReceive(sendPort, "foo"); print('received $msg'); msg = await sendReceive(sendPort, "bar"); print('received $msg'); }
echo(SendPort sendPort) async { var port = new ReceivePort();
sendPort.send(port.sendPort);
await for (var msg in port) { var data = msg[0]; SendPort replyTo = msg[1]; replyTo.send(data); if (data == "bar") port.close(); } }
Future sendReceive(SendPort port, msg) { ReceivePort response = new ReceivePort(); port.send([msg, response.sendPort]); return response.first; }
|
代码
参考
© 猫哥
https://ducafecat.tech
邮箱 ducafecat@gmail.com / 微信 ducafecat / 留言板 disqus