跳至主内容

线程模型

非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

注意

本文涉及正在逐步推出的新架构

React Native 渲染器将渲染管线的工作分配到多个线程执行。

本文定义线程模型,并通过示例说明渲染管线的线程使用情况。

React Native 渲染器在设计上具备线程安全性。高层级线程安全通过框架内部使用不可变数据结构实现(通过 C++ 的 "const correctness" 特性强制保证)。这意味着每次 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