首页 > 解决方案 > Dart 是单线程的,但为什么它使用 Future Objects 并执行异步操作

问题描述

在文档中,Dart 是单线程的,但为了一次执行两个操作,我们使用与线程相同的未来对象。

使用 Future 对象(期货)来执行异步操作。

如果 Dart 是单线程的,那么为什么它允许执行异步操作。

注意:异步操作是称为线程的并行操作

标签: multithreadingdartflutter

解决方案


你提到:

异步操作是称为线程的并行操作

首先,异步操作不是完全并行的,甚至不是并发的。它只是意味着我们不想阻塞我们的执行流程(线程)或等待响应直到某些工作完成。但是我们实现异步操作的方式可以决定它是并行的还是并发的。

并行与并发?

并行实际上是在同一时间同时做很多事情。前 - 你在走路,同时你在消化你的食物。这两个任务完全并行且完全同时运行。

尽管

并发是并行的错觉。任务似乎是并行执行的,但事实并非如此。它喜欢一次处理很多事情,但在特定时间只做一项任务。前 - 你正在走路,突然停下来系你的花边。系好鞋带后,你又开始走路了。

现在来到 Dart,Future对象asyncawait关键字用于执行异步任务。这里异步并不意味着任务将彼此并行或并发执行。相反,在 Dart 中,甚至异步任务都在同一个线程上执行,这意味着当我们等待另一个任务完成时,我们将继续执行我们的同步代码。Future对象用于表示将在未来某个时间完成的任务的结果。

如果您想真正同时执行您的任务,请考虑使用 Isolates(它在单独的线程中运行并且不与主线程(或生成线程)共享内存。


推荐阅读