跳至主要内容

线程模型

注意

本文档指的是正在积极推广的新架构

React Native 渲染器将渲染管道的工作分散到多个线程上。

在这里,我们定义了线程模型并提供了一些示例来说明渲染管道的线程使用情况。

React Native 渲染器被设计为线程安全的。从高层次上讲,线程安全通过在框架内部使用不可变数据结构来保证(由 C++ 的“const 正确性”特性强制执行)。这意味着 React 中的每次更新都会在渲染器中创建或克隆新的对象,而不是更新数据结构。这使得框架能够向 React 公开线程安全且同步的 API。

渲染器使用两个不同的线程

  • UI 线程(通常称为主线程):唯一可以操作宿主视图的线程。
  • JavaScript 线程:React 的渲染阶段以及布局都在这里执行。

让我们回顾一下每个阶段支持的执行场景

Threading model symbols

渲染场景

在 JS 线程中渲染

这是最常见的场景,其中大部分渲染管道都在 JavaScript 线程上发生。

Threading model use case one

在 UI 线程中渲染

当 UI 线程上存在高优先级事件时,渲染器能够在 UI 线程上同步执行所有渲染管道。

Threading model use case two

默认或连续事件中断

此场景显示了 UI 线程中低优先级事件对渲染阶段的中断。React 和 React Native 渲染器能够中断渲染阶段并将其状态与在 UI 线程上执行的低优先级事件合并。在这种情况下,渲染过程继续在 JS 线程上执行。

Threading model use case three

离散事件中断

渲染阶段是可以中断的。此场景显示了 UI 线程中高优先级事件对渲染阶段的中断。React 和渲染器能够中断渲染阶段并将其状态与在 UI 线程上执行的高优先级事件合并。渲染阶段在 UI 线程上同步执行。

Threading model use case four

C++ 状态更新

源自 UI 线程的更新并跳过渲染阶段。有关更多详细信息,请参阅React Native 渲染器状态更新

Threading model use case six