Dart线程模型
介绍
Dart 是单线程模型的,通过事件队列实现异步。
右图是 Dart 单线程模型,循环执行两个队列,当队列均为空则退出。
单线程与 isolate
单线程指的是 isolate 内部。一个 isolate 对应一个线程,对应一个事件队列。
isolate 之间是隔离的(堆内存隔离),不存在线程安全问题。

两个队列
MicrotaskQueue
优先级高。创建微任务:
scheduleMicrotask(() => print('microtask'));
EventQueue
isolate 启动后默认进入线程循环。
注意:
- Future 是插入到 EventQueue 的。
性能问题
慢消息
如果一个 Event(Future)执行耗时很长,会导致主线程卡住。慢消息结束后才会恢复。
定时 Timer 也有可能受到影响被推延,因此 Timer 并不是完全可靠的。
程序退出条件
循环执行两个队列,当队列均为空则退出。
main 函数执行完毕,如果队列不为空,程序不会退出。