I want to explain about How to distribute the load with Isolate.
And In this Document, I'll confirm about isolate basic usage before explain it.
Hello Isolate
We can write multi-threads like programming code to use Isolate.
import 'dart:isolate' as iso;
onMain(message) async {
//
print("child:arg:${message}");
for (var i = 0; i < 5; i++) {
await Future.delayed(Duration(milliseconds: 100));
print("child:print:${i}");
}
}
main() async {
iso.Isolate.spawn(onMain, "Hi");
for (var i = 0; i < 5; i++) {
await Future.delayed(Duration(milliseconds: 100));
print("parent:print:${i}");
}
}
$ dart bin/main_example_isolate_01.dart
child:arg:Hi
parent:print:0
child:print:0
parent:print:1
child:print:1
parent:print:2
child:print:2
parent:print:3
child:print:3
parent:print:4
Communication For Each Isolate
Parent Isolate and Child Isolate can not share memory.
if you want to share data both isolate, you must to use SendPort and ReceivePort.
import 'dart:isolate' as iso;
onMain(message) async {
//
print("child:arg:${message}");
iso.SendPort sendPort = message['p'];
for (var i = 0; i < 5; i++) {
await Future.delayed(Duration(milliseconds: 100));
print("child:print:${i}");
sendPort.send("hi${i}");
}
}
main() async {
iso.ReceivePort receivePort = iso.ReceivePort();
receivePort.listen((message) {
print("parent:onMessage: ${message}");
});
iso.Isolate.spawn(onMain, {"v": "Hi", "p": receivePort.sendPort});
for (var i = 0; i < 5; i++) {
await Future.delayed(Duration(milliseconds: 100));
print("parent:print:${i}");
}
receivePort.close();
}
$ dart bin/main_example_isolate_02.dart
child:arg:{v: Hi, p: SendPort}
parent:print:0
child:print:0
parent:onMessage: hi0
parent:print:1
child:print:1
parent:onMessage: hi1
parent:print:2
child:print:2
parent:onMessage: hi2
parent:print:3
child:print:3
parent:onMessage: hi3
parent:print:4
child:print:4
parent:onMessage: hi4
Next
More Isolate
https://github.com/kyorohiro/hao_dart_server_and_systemd/blob/master/bin/main_example_isolate.dart
Top comments (1)
Isoalte for Web is here
dev.to/kyorohiro/isolate-at-flutte...