隔离与未来
问题内容:
我可能对“隔离与未来”有错误的认识。请帮助我清除它。这是我对这两个主题的理解。
隔离:将运行代码隔离在其自己的事件循环中,并且每个事件都可以在嵌套的微任务队列中运行较小的任务。
期货:期货用于表示将来某个时候可用的潜在价值或错误。
我的困惑是:
-
医生说隔离有自己的循环吗?我觉得拥有自己的事件队列对我来说更有意义,我错了吗?
-
Future是否在主隔离上异步运行?我假设将来的任务实际上被放置在事件队列的末尾,所以如果将来它将通过循环执行。如我错了请纠正我。
-
为什么在将来有机会使用隔离?我看到一些使用Isolate代替Future进行繁重任务的示例。但为什么?仅当将来在主隔离队列上异步执行时,这对我才有意义。
问题答案:
A 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文件或URL
https://api.dartlang.org/stable/2.0.0/dart-
isolate/Isolate/spawnUri.html加载)。
隔离不会共享任何状态,只能使用消息传递(SendPort / ReceivePort)进行通信。每个隔离都有自己的事件队列。
https://webdev.dartlang.org/articles/performance/event-
loop