异步编程

isolate机制

Dart是单线程模型,它的并发机制叫isolate。APP的启动入口main函数就是一个类似Android主线程的一个主isolate。和Java的Thread不同的是,Dart中的isolate无法共享内存。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

// 导入isolate包
import 'dart:isolate';

// 使用async关键词将main函数标记为一个异步函数,这样才能使用await关键词
void main() async {
// 使用await关键词等待任务执行完成
await Isolate.spawn<String>(subTask, "Task1 parameter");

// main函数结束标记
print("main func end.");
}

// Isolate入口函数定义,接受一个String参数
void subTask(String msg) {
print("subTask recv: $msg");
}

消息机制

Dart在执行完main函数后,就会由Loop开始执行两个任务队列中的Event。首先Loop检查微服务队列,依次执行Event,当微服务队列执行完后,就检查Event queue队列依次执行,
在执行Event queue的过程中,每执行完一个Event就再检查一次微服务队列。所以微服务队列优先级高,可以利用微服务进行插队。

Future

在 Dart 库中随处可见 Future 对象,通常异步函数返回的对象就是一个 Future。 当一个 future 执行完后,他里面的值就可以使用了,可以使用then()来在future完成的时候执行其他代码。Future对象其实就代表了在事件队列中的一个事件的结果。

Read More

消息机制

概述

Dart在执行完main函数后,就会由Loop开始执行两个任务队列中的Event。首先Loop检查微服务队列,依次执行Event,当微服务队列执行完后,就检查Event queue队列依次执行,在执行Event queue的过程中,没执行完一个Event就再检查一次微服务队列。所以微服务队列优先级高,可以利用微服务进行插队。

  • event队列:包含所有外来的事件:I/O,mouse events,drawing events,timers,isolate之间的message等。

  • microtask队列:在Dart中是必要的,因为有时候事件处理想要在稍后完成一些任务但又希望是在执行下一个事件消息之前。

Read More

Future

Future 是在未来某个时间获得想要对象的一种手段。Future 表示一个不会立即完成的计算过程。与普通函数直接返回结果不同的是异步函数返回一个将会包含结果的 Future。该 Future 会在结果准备好时通知调用者。

Future中除了microtask外,其他任务都是添加到Event队列中执行。

Future状态

  • 运行状态(pending),表示任务还未完成,也没有返回值
Read More