Dart 语言的 Event Loop 处理机制
首先Dart是单线程模型,其中的异步处理事件通过Event Loop来实现。我们的实际使用中,APP的ui渲染并不是一直在占用CPU资源的,那么有大多数的时间其实线程都是在等待状态。而用户点击,文件I/O操作,网络请求这些在用户提交命令后,会由回调方法通知给EventQueue来异步执行,这其中的时间并不阻塞线程,以此达到异步的效果。
简单的理解这个流程可以参考下图1.1
简化版 图1.1
不过实际上在EventQueue之前,还有一个用到不多的MicrotaskQueue 微任务队列(这里有点接近kotlin的协程)。
理解流程请参考下图1.2
完整版 图1.2
实际使用中,微任务队列一般放置一些短时间内可以完成的异步任务,他的优先级高于EventQueue中的任务。
微任务可以通过scheduleMicroTask建立。例如下列代码,将会在当前同步线程代码执行完后,在下一个循环一开始执行(如果微任务队列中也有多个任务,那么执行顺序是先执行先进入的任务)
scheduleMicrotask(() => print('正在执行一个微任务'));<