Categories
程式開發

探索Flutter中线程模型/消息循环的底层逻辑


前言

多线程模型以及线程中的事件循环机制在 OS 里都是必不可少的一部分,也扮演着非常重要的角色,主要用来做异步任务的分发与调度。例如浏览器 JSEngine 中的单线程事件循环机制,那么 Flutter 中的线程模型与事件循环是如何实现的呢?

关于 Flutter 的线程机制,官方给了一个比较宏观层面的说明,简单概括如下:

Flutter Engine 不创建/管理线程,都是由对应的平台层实现,并抽象 Task Runner 概念,共有 4 个 Task Runner ,并且不关心这 4 个 Task Runner 是否是相同的 Task Runner,也不关心是否运行在同一个线程。不过官方还是给出了指导性建议,为了性能,最好是一个 Task Runner 对应一个 Thread ,4 个 Task Runner 分别为:

  1. Platform Task Runner :对应平台如 Android/iOS 的 UI/Main Thread。
  2. UI Task Runner:所有 Dart Framework 层的代码均在此现场执行。
  3. Raster Task Runner:真正执行渲染任务,光栅化所有从 UI Task Runner中提交过来的任务,最终渲染到屏幕上。
  4. IO Task Runner:通常执行耗时计算任务,例如下载/解码远程图片,再交给 Raster Task Runner 渲染。

原文链接:【https://www.infoq.cn/article/MJ6lmZSLbSZPZ5L7DqqG】。未经作者许可,禁止转载。