M.A*_*han 16 multithreading dart flutter
在文档中,Dart 是单线程的,但是为了一次执行两个操作,我们使用与线程相同的未来对象。
使用 Future 对象(期货)来执行异步操作。
如果 Dart 是单线程的,那么为什么它允许执行异步操作。
注意:异步操作是并行操作,称为线程
Shu*_*oni 11
你提到:
异步操作是称为线程的并行操作
首先,异步操作并不是完全并行甚至并发的。它只是简单地意味着我们不想阻塞我们的执行流(线程)或等待响应直到某些工作完成。但是我们实现异步操作的方式可以决定它是并行还是并发。
并行与并发?
并行实际上是同时做很多事情。ex - 你在走路,同时你在消化你的食物。这两个任务完全并行且完全同时运行。
尽管
并发是并行的错觉。任务似乎是并行执行的,但实际上并非如此。它喜欢一次处理很多事情,但在特定时间只做一项任务。ex - 你正在走路,突然停下来系你的秀花边。系好鞋带后,你又开始走路了。
现在来到 Dart,Future对象async和await关键字用于执行异步任务。这里异步并不意味着任务将彼此并行或并发执行。相反,在 Dart 中,即使异步任务也在同一个线程上执行,这意味着当我们等待另一个任务完成时,我们将继续执行我们的同步代码。Future对象用于表示将在未来某个时间完成的任务的结果。
如果您想真正同时执行您的任务,请考虑使用 Isolates(它在单独的线程中运行,并且不与主线程(或生成线程)共享内存。
为什么?因为这是必需品。某些操作,例如 http 请求或计时器,本质上是异步的。
有一些隔离允许您在不同的进程中执行代码。与其他编程语言中的线程不同的是,隔离不会相互共享内存(这会导致并发问题),它们仅通过消息进行通信。
为了接收这些消息(或包裹在 a 中Future,它的结果),Dart 使用了一个事件循环。