首页/新闻资讯/正文详情

JS线程、UI线程、Native线程关系

发布时间:2026/9/26 6:11:42 来源:云帆数科 栏目:资讯中心
JS线程、UI线程、Native线程关系
如果你是在理解React Native / Expo这类跨平台框架里的“JS 线程、UI 线程、Native 线程”可以先抓住一个核心JS 线程负责“决定做什么”UI 线程负责“把界面画出来”Native 线程负责“执行原生能力”。但严格来说“Native 线程”不是一个固定的单独线程这是最容易混淆的地方。先看整体关系React / JS 代码 │ ▼ ┌─────────────┐ │ JS线程 │ │ │ │ 状态计算 │ │ React逻辑 │ │ 业务逻辑 │ │ 网络请求 │ └──────┬──────┘ │ JS ↔ Native 通信/调用 │ ▼ ┌─────────────────────────┐ │ Native 世界 │ │ │ │ UI线程/Main线程 │ │ │ │ │ ▼ │ │ Layout / UI / 渲染 │ │ │ │ 其他Native线程 │ │ 网络 / IO / 图片 / 音频 │ │ 数据库 / 原生模块 │ └─────────────────────────┘1. JS 线程是什么比如const [count, setCount] useState(0); function onPress() { setCount(count 1); }这些JavaScript / React 代码通常是在 JS runtime 所在的线程执行。它主要负责React 组件执行状态管理业务逻辑JS 定时器事件处理数据处理发起网络请求决定 UI 应该变成什么样例如setCount(count 1)JS 线程会参与点击 ↓ JS线程 ↓ 执行 onPress() ↓ setCount() ↓ React重新计算 ↓ 产生新的UI更新2. UI线程是什么UI线程通常也叫Main ThreadMain/UI Thread它是操作系统负责处理界面相关工作的核心线程。例如 Android / iOS 中UI线程 ↓ View ↓ Layout ↓ 绘制 ↓ 屏幕所以View TextHello/Text /View并不是说View本身就是一个 JS 对象然后直接被屏幕画出来。而是JS │ │ 描述我要什么 ▼ React Native │ ▼ Native UI │ ▼ UI线程 │ ▼ 屏幕3. Native线程是什么这里要特别注意Native ≠ Native线程。Native 指的是原生代码例如Android Java / Kotlin / C iOS Objective-C / Swift / CNative 代码可以运行在多个线程。例如Native ├── UI线程 ├── IO线程 ├── 网络线程 ├── 图片处理线程 ├── 音频线程 ├── JS相关线程 └── 其他线程所以如果有人说“Native线程负责UI”这个说法其实不够准确。更准确应该说Native UI代码通常需要在UI/Main线程执行。4. 三者最重要的关系可以把它理解成一个公司JS线程 │ “我要做什么” │ ▼ ┌────────────────┐ │ Native层 │ │ │ │ UI线程 │ │ “怎么画出来” │ │ │ │ 其他线程 │ │ “怎么执行任务” │ └────────────────┘例如button.setOnPress(() { setCount(count 1); });大概可以理解成用户点击 │ ▼ UI线程接收到触摸 │ ▼ 把事件传给JS │ ▼ JS线程执行onPress │ ▼ React计算新的UI状态 │ ▼ Native侧更新 │ ▼ UI线程执行UI更新 │ ▼ 屏幕刷新5. 为什么会出现“JS线程卡顿”假设你写function test() { for (let i 0; i 10000000000; i) { // 非常耗时 } }那么JS线程 ████████████████████████████ 一直计算JS线程被占满。这时候可能出现点击事件 ↓ JS线程忙 ↓ 事件无法及时处理 ↓ React更新延迟 ↓ 用户感觉卡顿这就是常说的JS线程阻塞6. UI线程卡顿又是什么假设 UI线程正在执行非常重的任务UI线程 ████████████████████████ Layout 绘制 Layout 绘制 复杂动画 复杂绘制如果超过一帧的时间就会掉帧。例如 60 FPS1000ms / 60 ≈ 16.67ms意味着一帧大约只有16.67ms如果UI线程这一帧花了50ms就可能出现Frame 1 Frame 2 Frame 3 ████████████████ ↑ 卡顿所以JS线程卡 ≠ UI线程一定卡反过来也一样。7. React Native 为什么特别关心这三个概念因为 RN 本质上是在JavaScript ↓ React Native Runtime ↓ Native ↓ Android / iOS UI中间进行协作。传统 RN 架构可以粗略理解为┌───────────────┐ │ JS线程 │ │ React │ │ JavaScript │ └───────┬───────┘ │ │ Bridge │ ▼ ┌───────────────┐ │ Native │ │ │ │ UI线程 │ │ Native Modules│ └───────────────┘而现代 React Native 的JSI / Fabric / TurboModules架构会减少传统 Bridge 带来的序列化和通信开销。大致变成JS Runtime │ │ JSI ▼ ┌──────────────┐ │ C / Native │ └──────┬───────┘ │ ┌──────┴───────┐ ▼ ▼ UI线程 其他线程 │ ▼ Screen这也是理解React Native 新架构的关键。8. 那 Expo 又是什么如果你最近是在学Expo / React Native可以把它放到这个模型里面Expo App │ ┌──────────┴──────────┐ │ │ JavaScript Native │ │ React代码 iOS / Android │ │ ▼ ▼ JS线程 UI线程 │ ▼ 屏幕Expo 本身并不是一个“线程”。它更像是一套React Native 原生能力 工具链 开发服务9. 最容易记住的版本你可以直接记这个概念主要干什么JS线程执行 JS、React、业务逻辑UI线程处理原生 UI、布局、绘制、用户交互Native原生代码/能力的统称不是一个固定线程Native线程泛指 Native 世界中的各种线程JSIJS ↔ Native/C 更直接的通信机制Bridge传统 RN JS ↔ Native 通信机制最关键的一句话JS 是“脑子”UI线程是“画手”Native 是“整个原生世界”。Native 不等于某一个线程。如果你下一步是在学Expo / React Native 性能优化那么继续理解JS线程 → JSI → UI线程 → GPU这一整条链会非常有用。尤其是为什么Reanimated 的动画可以在 UI 线程跑而普通setState动画容易受到 JS 线程阻塞影响。

相关推荐

12GB显存本地运行多模态大模型:GGUF量化与Unsloth优化实战
12GB显存本地运行多模态大模型:GGUF量化与Unsloth优化实战

1. 为什么“12GB显存可本地运行”不是营销话术,而是量化技术落地的真实拐点最近在几个AI开发者群里,几乎每天都有人甩出同一张截图:Unsloth官方仓库里新挂出来的Qwen-Image-2.1-GGUF模型文件列表,最醒目的不是参数量,而… · 2026/9/26 6:11:36

TIA-942中文完整版解读:Tier分级与机房设计落地
TIA-942中文完整版解读:Tier分级与机房设计落地

简介:《TIA-942数据中心电信基础设施标准》中文完整版,是面向数据中心设计、建设与运维人员的权威参考文件,由美国电信工业协会发布,系统解决了机房空间规划、综合布线、供配电及冗余容错等关键问题。资源为单一PDF文档&#xff0… · 2026/9/26 6:11:36

Claude Code 模板库实战:从裸配到工程化配置,一键复用AI编程工作流
Claude Code 模板库实战:从裸配到工程化配置,一键复用AI编程工作流

如果你受够了每次启动新项目时,都要在终端里花十分钟向 Claude Code 解释技术栈、代码规范、测试要求,然后不到二十条对话它又忘了一半——那这篇关于 claude-code-templates 的经验分享应该能帮到你。我去年开始把 Claude Code 作为主力开发工具&#x… · 2026/9/26 6:11:36

Redis缓存穿透、击穿与雪崩:成因、排查与实战解决方案
Redis缓存穿透、击穿与雪崩:成因、排查与实战解决方案

1. 项目概述——三个缓存问题的前世今生做后端开发的,尤其是跟高并发系统打过交道的,对“缓存穿透、缓存击穿、缓存雪崩”这三个词肯定不会陌生。这几乎是Redis缓存场景里最经典的三座大山,也是面试官最爱追问的连环炮:先让你解释… · 2026/9/26 6:38:40

Redis缓存三大难题:穿透、击穿、雪崩的成因与实战方案
Redis缓存三大难题:穿透、击穿、雪崩的成因与实战方案

缓存穿透、缓存击穿、缓存雪崩这三个词,只要是搞后端开发的,面试必问,线上必踩。我刚工作那会儿,以为把数据往Redis里一塞就完事了,结果第一次压测就把数据库搞挂了,原因就是没搞懂这三个问题。这期内容我把… · 2026/9/26 6:38:40

展汇物流国际展会运输评价好不好,出国参展物流运输实力参考
展汇物流国际展会运输评价好不好,出国参展物流运输实力参考

展汇物流国际展会运输评价好不好?出国参展物流运输有哪些值得参考的实力标准?展汇物流出国参展物流运输收费标准是什么样的?今天就针对这些参展企业关注度极高的问题,一一进行解答。Q1:展汇物流服务怎么样?对于计划出海参展的企业来说,选… · 2026/9/26 6:38:40

人机互助新时代融智学五层架构论
人机互助新时代融智学五层架构论

Experiment Findings File available 人机互助新时代融智学五层架构论 September 2026 DOI: 10.13140/RG.2.2.12936.79360 ​Xiaohui Zou 摘要:本文在融智学“义、意、意义、同意”四层架构基础上,增加第五层——语库层,提出 五层融智架构&#xff… · 2026/9/26 6:38:40

黑龙江本地糖果釉瓷砖优选:晟迈建材覆盖家装、工装及商业空间适用项目
黑龙江本地糖果釉瓷砖优选:晟迈建材覆盖家装、工装及商业空间适用项目

糖果釉瓷砖行业基础科普瓷砖是空间装饰装修的核心基材之一,直接决定了空间的整体质感与使用体验,而糖果釉瓷砖作为近年来深受市场喜爱的瓷砖品类,凭借独特的工艺与表现,成为很多家庭装修、商业空间装修的热门选择。糖果釉瓷砖是在… · 2026/9/26 6:38:40

六面体单元稳态热传导有限元MATLAB程序实现与验证
六面体单元稳态热传导有限元MATLAB程序实现与验证

1. 项目背景与程序定位搞传热分析的人应该都深有体会,做三维温度场计算时,四面体单元虽然适应性极强、什么不规则的几何都能往上招呼,但如果模型本身可以划分为结构化网格,六面体单元的计算效率和精度优势是十分明显的。今天我分享… · 2026/9/26 6:38:33

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码