Dart 之任务

前言

任务是什么呢?是今天要早睡,明天要早起。Dart中的任务也和我们生活中的任务一样,是予以指派的特定工作(如我给自己指派今天早睡),只不过Dart是通过事件循环任务队列管理任务执行顺序。同生活中任务的划分,Dart中也会对任务进行划分,它按照不同的规则将任务划分为同步任务、异步任务、微任务等。那Dart中的任务具体是啥样的呢?准备好,跟随脚步,我们一起去看看。

一、任务的定义

学习一个新知识,我们首先得知道学习的新知识是什么。那我们怎么知道这个知识是啥呢?知识的定义给出了答案,它以一个最快最简洁的方式让我们认识新的内容。下面我们分别给出生活中、计算机中、Dart中关于任务的定义。

  • 生活中的任务:指指派予个体或团队的特定工作或职责,也可是个体主动规划的事项,由个人或团体执行。例如快递站站长给骑手指派今天完成的单量。
  • 计算机中的任务:指由操作系统调度器管理的逻辑工作单元,其执行依托于线程或进程资源。例如数据处理、网络请求等具体操作。
  • Dart中的任务:指程序要实现的具体目标(如发请求、读文件),所有任务均由Dart主线程负责执行。

看完了定义,任务都有哪些要点呢?

答:1、任务需要消耗资源。 理由:生活中骑手完成单量这个任务需要耗费人力、车损等资源;计算机中执行任务需要依托进程执行,需要使用到分配给进程的资源;Dart中任务都由主线程执行,而线程执行需要使用进程的资源。

2、任务可并行或并发执行。 理由:生活中任务并行执行如一边吃饭一边追剧,并发如吃一会看一会儿再吃一会;计算机中任务可以被多个进程、线程同时处理(并行),也可被一个进程或线程处理(并发执行);Dart中依靠主线程交错执行任务(并发),依靠事件循环和任务队列实现并发执行。

3、任务具有状态。 理由:生活中如骑手有取餐中、配送中、配送结束;计算机中任务依托线程、进程执行就具有了进程的创建态、就绪态、运行态、阻塞态等;Dart中依赖主线程执行当然就具有计算机中线程的状态了。

4、任务具有目标导向。理由:生活中骑手目标为送餐到客户手中;计算机中达到某种效果;Dart中也是为了完成一定的目标。

二、Dart中任务的分类

我们主要介绍按照执行方式划分的任务,将任务划分为两类,分别为同步任务、异步任务。

2.1、同步任务

这类任务必须按照一定的顺序执行,若前一个任务未执行完成,则后一个任务便不能执行,必须等待前一个任务完成,就像是我们生活中的排队一样,得先等待前一个人处理完了,才能到你。

示例:

Dart 复制代码
void main() {
    print('任务1'); // 同步代码,最先开始执行,意味着最先打印这行。
    print('任务2'); 
    for(int i = 0; i < 100000; i++){} // 需要耗费时间的同步代码
    print('任务3'); // 需要等待前面的同步代码执行完才能执行。
    print('任务4');    
}
输出:
任务1
任务2
任务3
任务4

注意:Dart中同步任务比异步任务先执行。

2.2、异步任务

为解决排队过程中的处理时间较长,导致后面排队等待过长。生活中采取了发短信通知等方式解决此问题,而在Dart中采用异步任务的方式解决此问题。那异步是咋解决的呢?异步任务通常是一个耗时的操作(如网络请求),异步任务并不会等待,但会贴出告示说自己完成没有,就像发短信通知状态一样。了解了异步任务是咋回事,我们来看看Dart异步任务的分类。

异步任务的分类:

  • 微任务:指优先级较高的异步任务。

  • 事件任务:指由外部事件触发的异步任务,如网络响应等。他的优先级低于微任务。

同步任务与异步任务的执行顺序如下图所示。

三、Dart中异步任务的状态

在此部分,我们先回顾一下操作系统中任务的状态。然后再看Dart中异步任务的状态。

3.1、操作系统中任务的状态

  • 创建:操作系统为任务分配好资源,并未准备好执行。
  • 就绪:所有资源准备完备,只差CPU。
  • 运行:任务在CPU上执行指令。
  • 阻塞:执行过程中发生某些事件而暂停执行。如等待I/O操作完成。
  • 终止:任务成功完成了或失败了。操作系统回收分配的资源。

3.2、Dart中异步任务的状态

  • 创建(created):任务被创建。
  • 待定(pending):任务开始执行,但未完成。
  • 执行(running):异步操作正在执行。
  • 完成(completed):分为两种状态,成功完成和失败完成。
  • 清理(dispose):释放资源。

四、总结

本小节从日常生活中的任务出发,首先对比生活中、计算机中、Dart中任务的定义,引出任务都具有的要点。然后在了解任务的基础上,介绍了Dart中按执行方式划分的任务分类,主要分为同步任务和异步任务,其中异步任务中简述了微任务与事件任务。最后在回顾了操作系统中任务的状态基础上介绍了Dart中异步任务的状态。

任务要点 Dart中任务的分类 Dart中异步任务的状态
任务需要消耗资源 同步任务 (最先执行) 创建(Created)
任务可并行或并发执行 异步任务(所有同步任务执行完才执行) 待定(Pending)
任务具有状态 微任务 (异步任务中优先级最高) 执行(Running)
任务具有目标导向 事件任务(一般优先级) 完成(Completed)
清理(Disposed)
相关推荐
getapi43 分钟前
flutter底部导航代码解释
前端·javascript·flutter
初遇你时动了情1 小时前
安装fvm可以让电脑同时管理多个版本的flutter、flutter常用命令、vscode连接模拟器
flutter
QING6183 小时前
详解:Kotlin 类的继承与方法重载
android·kotlin·app
QING6183 小时前
Kotlin 伴生对象(Companion Object)详解 —— 使用指南
android·kotlin·app
一一Null3 小时前
Android studio 动态布局
android·java·android studio
AD钙奶-lalala11 小时前
某车企面试备忘
android
我爱拉臭臭11 小时前
kotlin音乐app之自定义点击缩放组件Shrink Layout
android·java·kotlin
匹马夕阳12 小时前
(二十五)安卓开发一个完整的登录页面-支持密码登录和手机验证码登录
android·智能手机
吃饭了呀呀呀13 小时前
🐳 深度解析:Android 下拉选择控件优化方案——NiceSpinner 实践指南
android·java
吃饭了呀呀呀13 小时前
🐳 《Android》 安卓开发教程 - 三级地区联动
android·java·后端