分类
联系方式
  1. 新浪微博
  2. E-mail

Dart线程模型

介绍

Dart 是单线程模型的,通过事件队列实现异步。

右图是 Dart 单线程模型,循环执行两个队列,当队列均为空则退出。

单线程与 isolate

单线程指的是 isolate 内部。一个 isolate 对应一个线程,对应一个事件队列。

isolate 之间是隔离的(堆内存隔离),不存在线程安全问题。

Dart 单线程模型

两个队列

MicrotaskQueue

优先级高。创建微任务:

scheduleMicrotask(() => print('microtask'));

EventQueue

isolate 启动后默认进入线程循环。

注意:

  • Future 是插入到 EventQueue 的。

性能问题

慢消息

如果一个 Event(Future)执行耗时很长,会导致主线程卡住。慢消息结束后才会恢复。

定时 Timer 也有可能受到影响被推延,因此 Timer 并不是完全可靠的。

程序退出条件

循环执行两个队列,当队列均为空则退出。

main 函数执行完毕,如果队列不为空,程序不会退出。