在任意时刻, 一个 CPU 核心上(processor)只可能运行一个进程
每一个进程可以包含多个线程,线程是执行操作的最小单元,因此进程的切换落实到具体细节就是正在执行线程的切换
Future
Future 表示一个异步的操作结果,用来表示一个延迟的计算,返回一个结果或者error
,使用代码实例:
Future future = getFuture();
future.then((value) => handleValue(value))
.catchError((error) => handleError(error))
.whenComplete(func);
future可以是三种状态:未完成的
、返回结果值
、返回异常
当一个返回future对象被调用时,会发生两件事:
-
将函数操作入队列等待执行结果并返回一个未完成的Future对象
-
函数操作完成时,
Future
对象变为完成并携带一个值或一个错误
首先,Flutter事件处理模型为先执行main函数,完成后检查执行微任务队列Microtask Queue
中事件,最后执行事件队列Event Queue
中的事件,示例:
void main(){
Future(() => print(10));
Future.microtask(() => print(9));
print(“main”);
}
/// 打印结果为:
/// main
/// 9
/// 10
基于以上事件模型的基础上,看下Future提供的几种构造函数,其中最基本的为直接传入一个Function
:
factory Future(FutureOr computation()) {
_Future result = new _Future();
Timer.run(() {
try {
result._complete(computation());
} catch (e, s) {
_completeWithErrorCallback(result, e, s);
}
});
return result;
}
Function
有多种写法:
//简单操作,单步
Future(() => print(5));
//稍复杂,匿名函数
Future((){
print(6);
});
//更多操作,方法名
Future(printSeven);
printSeven(){
print(7);
}
Future.microtask
此工程方法创建的事件将发送到微任务队列Microtask Queue
,具有相比事件队列Event Queue
优先执行的特点
factory Future.microtask(FutureOr computation()) {
_Future result = new _Future();
//
scheduleMicrotask(() {
try {
result._complete(computation());
} catch (e, s) {
_completeWithErrorCallback(result, e, s);
}
});
return result;
}</