Isolate
Dart 中的线程概念是 Isolate
, 一个在操作系统 Thread
只上的封装, 默认 Dart 程序会在一个 Isolate
中顺序执行代码.
Isolate
中的代码是按顺序执行
- 任何
Dart
程序的并发都是运行多个 Isolate
的结果
- 因为
Isolate
之间不会共享内存,没有竞争的可能性所以不需要锁,也就不用担心死锁的问题
Isolate
之间不能直接通信, 可以通过 DartVM 提供的 SendPort 通道通信
DartVM 运行模式
- 单线程执行: 一个 Isolate 拥有一个事件循环
- 一个事件循环和两个队列
|
|
|
- 事件循环只由单个线程执行 => 没有同步和锁的问题
- microtask queue 优先级高于 event queue
- 队列里的方法被执行时会阻塞整个程序
- 创建一个
Future 就是向 event queue 提交一个事件 - 通过
Future.microtask 或scheduleMicrotask 向 microtask queue 提交一个事件
|
Question
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import 'dart:async';
void main() {
print('#1');
scheduleMicrotask(() => print('#2'));
Future.delayed(Duration(seconds: 1), () => print('#3')); // 延迟1秒再回调
Future(() => print('#4'));
Future(() => print('#5'));
scheduleMicrotask(() => print('#6'));
print('#7');
}
|
结果是? (运行试试吧)