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)
相关推荐
鸿蒙布道师2 小时前
鸿蒙NEXT开发动画案例2
android·ios·华为·harmonyos·鸿蒙系统·arkui·huawei
androidwork2 小时前
Kotlin Android工程Mock数据方法总结
android·开发语言·kotlin
xiangxiongfly9154 小时前
Android setContentView()源码分析
android·setcontentview
人间有清欢6 小时前
Android开发补充内容
android·okhttp·rxjava·retrofit·hilt·jetpack compose
人间有清欢6 小时前
Android开发报错解决
android
每次的天空8 小时前
Android学习总结之kotlin协程面试篇
android·学习·kotlin
每次的天空10 小时前
Android学习总结之Binder篇
android·学习·binder
峥嵘life10 小时前
Android 有线网开发调试总结
android
是店小二呀11 小时前
【算法-链表】链表操作技巧:常见算法
android·c++·算法·链表
zhifanxu12 小时前
Kotlin 遍历
android·开发语言·kotlin