我可能对孤立和 future 有错误的想法。请帮我清理一下。这是我对这两个主题的理解。
隔离:Isolates在自己的事件循环中运行代码,每个事件都可以在嵌套的微任务队列中运行较小的任务。
Future:Future 用于表示将来某个时间可用的潜在值或错误。
我的困惑是:
文档说 Isolate 有它自己的循环?我觉得拥有自己的事件队列对我来说更有意义,我错了吗?
future 是否在主 Isolate 上异步运行?我假设 future 的任务实际上被放置在事件队列的末尾,所以如果它将来会被循环执行。如果我错了,请纠正我。
既然有 future ,为什么还要使用 Isolate?我看到了一些使用 Isolate 代替 Future 来完成繁重任务的示例。但为什么?只有当将来在主隔离队列上异步执行时,它才对我有意义。
最佳答案
Future
是一个句柄,允许您在异步执行完成时收到通知。
异步执行使用事件队列,代码在同一个线程内并发执行。
https://webdev.dartlang.org/articles/performance/event-loop
Dart 代码默认在根隔离中执行。
您可以启动通常在另一个线程上运行的其他隔离。
隔离可以从与根隔离启动的相同 Dart 代码加载(使用与 main()
https://api.dartlang.org/stable/2.0.0/dart-isolate/Isolate/spawn.html 不同的入口点)或不同的 Dart 代码(从某个 Dart 文件加载或网址 https://api.dartlang.org/stable/2.0.0/dart-isolate/Isolate/spawnUri.html )。
隔离不共享任何状态,只能使用消息传递(SendPort/ReceivePort)进行通信。每个隔离区都有自己的事件队列。
关于dart - Flutter 隔离与 future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52498773/