dart - Flutter 隔离与 future

标签 dart flutter future dart-isolates

我可能对孤立和 future 有错误的想法。请帮我清理一下。这是我对这两个主题的理解。

隔离:Isolates在自己的事件循环中运行代码,每个事件都可以在嵌套的微任务队列中运行较小的任务。

Future:Future 用于表示将来某个时间可用的潜在值或错误。

我的困惑是:

  1. 文档说 Isolate 有它自己的循环?我觉得拥有自己的事件队列对我来说更有意义,我错了吗?

  2. future 是否在主 Isolate 上异步运行?我假设 future 的任务实际上被放置在事件队列的末尾,所以如果它将来会被循环执行。如果我错了,请纠正我。

  3. 既然有 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)进行通信。每个隔离区都有自己的事件队列。

https://webdev.dartlang.org/articles/performance/event-loop

关于dart - Flutter 隔离与 future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52498773/

相关文章:

android - Release模式下的 Flutter 谷歌地图不起作用

dart - 如何将小部件构造函数作为参数传递给另一个要构建的小部件

rust - 如何打印调试的 future 值(value)?

python - `DummyExecutor` 用于 Python 's ` future `

GWT 与 Dart - 主要区别是什么? Dart 是 GWT 的潜在替代品吗?

sqlite - 在 flutter 中使用 sqlflite 删除数据库似乎不起作用

flutter - 根据键值以 Dart/Dart 查询 map 对象数据

flutter - flutter 导航中的未定义名称 'context'

ios - Firebase 上 iOS 的 Flutter 集成测试?

asynchronous - 如何将流转换为 future ?