如何在隔离中创建三个无限循环?
How to create three infinity loop inside isolate?
我正在学习 Dart 并使用 Isolate。我编写了下一个代码,并期望它将创建三个可以无限工作的隔离进程:
main() {
Isolate.spawn(echo, "Hello");
Isolate.spawn(echo, "Hello2");
Isolate.spawn(echo, "Hello3");
}
void echo(var message)
{
while(true)
{
print(message);
}
}
但是我得到了非常奇怪的输出,比如(每次都不同):
$ dart app.dart
Hello
Hello
Hello
Hello
HelloHello2
Hello
Hello3
Hello2
Hello
一旦 main isolate 结束,VM 将终止整个程序。对于您来说,这发生在您生成了所有三个分离株之后。没有什么能让主隔离保持活动状态,所以整个程序就结束了……最终,当隔离完成关闭时。这取决于时间,因此可能会有很大差异。
要使隔离物永远存活,您可以创建一个 ReceivePort
。尝试添加:
var keepalive = ReceivePort();
到你的程序,那么它应该永远保持 运行。
此外,打印的不仅仅是包含 hello 的行列表,它们是混合的。
三个分离株运行同时。它们都写入相同的输出 (stdout),因此输出会混合在一起。无法保证 print
调用是原子的,而事实并非如此,因此一个 isolate 中的 print 调用可能发生在另一个 isolate 中的 print 调用中间。
这里发生的是 print
不只是打印参数,之后还会打印一个换行符。这是对 stdout 的两次不同写入,因此另一个 isolate 可以在 "Hello" 和其后的“\n”之间打印其消息。
我正在学习 Dart 并使用 Isolate。我编写了下一个代码,并期望它将创建三个可以无限工作的隔离进程:
main() {
Isolate.spawn(echo, "Hello");
Isolate.spawn(echo, "Hello2");
Isolate.spawn(echo, "Hello3");
}
void echo(var message)
{
while(true)
{
print(message);
}
}
但是我得到了非常奇怪的输出,比如(每次都不同):
$ dart app.dart
Hello
Hello
Hello
Hello
HelloHello2
Hello
Hello3
Hello2
Hello
一旦 main isolate 结束,VM 将终止整个程序。对于您来说,这发生在您生成了所有三个分离株之后。没有什么能让主隔离保持活动状态,所以整个程序就结束了……最终,当隔离完成关闭时。这取决于时间,因此可能会有很大差异。
要使隔离物永远存活,您可以创建一个 ReceivePort
。尝试添加:
var keepalive = ReceivePort();
到你的程序,那么它应该永远保持 运行。
此外,打印的不仅仅是包含 hello 的行列表,它们是混合的。
三个分离株运行同时。它们都写入相同的输出 (stdout),因此输出会混合在一起。无法保证 print
调用是原子的,而事实并非如此,因此一个 isolate 中的 print 调用可能发生在另一个 isolate 中的 print 调用中间。
这里发生的是 print
不只是打印参数,之后还会打印一个换行符。这是对 stdout 的两次不同写入,因此另一个 isolate 可以在 "Hello" 和其后的“\n”之间打印其消息。