multithreading - Dart 是单线程的,但为什么它使用 Future Objects 并执行异步操作
问题描述
在文档中,Dart 是单线程的,但为了一次执行两个操作,我们使用与线程相同的未来对象。
使用 Future 对象(期货)来执行异步操作。
如果 Dart 是单线程的,那么为什么它允许执行异步操作。
注意:异步操作是称为线程的并行操作
解决方案
你提到:
异步操作是称为线程的并行操作
首先,异步操作不是完全并行的,甚至不是并发的。它只是意味着我们不想阻塞我们的执行流程(线程)或等待响应直到某些工作完成。但是我们实现异步操作的方式可以决定它是并行的还是并发的。
并行与并发?
并行实际上是在同一时间同时做很多事情。前 - 你在走路,同时你在消化你的食物。这两个任务完全并行且完全同时运行。
尽管
并发是并行的错觉。任务似乎是并行执行的,但事实并非如此。它喜欢一次处理很多事情,但在特定时间只做一项任务。前 - 你正在走路,突然停下来系你的花边。系好鞋带后,你又开始走路了。
现在来到 Dart,Future
对象async
和await
关键字用于执行异步任务。这里异步并不意味着任务将彼此并行或并发执行。相反,在 Dart 中,甚至异步任务都在同一个线程上执行,这意味着当我们等待另一个任务完成时,我们将继续执行我们的同步代码。Future
对象用于表示将在未来某个时间完成的任务的结果。
如果您想真正同时执行您的任务,请考虑使用 Isolates(它在单独的线程中运行并且不与主线程(或生成线程)共享内存。
推荐阅读
- reactjs - 如何使用函数为 React-Router 制作地图?
- ios - 如何在 SwiftUI 中将项目与 VStack 内的顶部对齐?
- node.js - 使用 sequelize 在 nodejs 和 Postgres 中插入错误
- android - 在android studio中运行我的第一个flutter应用程序时出现问题
- python - Python 是否有 Parquet 等价物?
- android - 如何在不复制和粘贴其父 onMeasure 实现的情况下修改自定义 TextView WRAP_CONTENT 高度?
- javascript - 如何在 React js 中读取和更新 csv 文件
- flutter - 向 Flutter 中的默认 User 类添加新属性
- python - 蟒龟在移动时留下点
- jenkins - 如何在 jenkins 文件中获取 hg 分支名称