为什么浏览器渲染进程不使用多线程的方式?

191 天前
 heroisuseless

在网上查了一下,说是如果多个线程同时修改 DOM ,可能会导致竞态条件和不可预测的结果。但是微信小程序用的就是双线程啊?所以浏览器用单线程最本质的原因是什么?以及微信小程序为什么要使用双线程?

5313 次点击
所在节点    浏览器
27 条回复
heroisuseless
190 天前
@zhbhun 感觉明白多了🙏
charlie21
190 天前
修改 DOM 和渲染 DOM 是不同的意思。抛开浏览器环境里,考虑一个大型游戏软件,为了提升游戏性能 必然要用到多线程,修改状态的线程当然可以是多个,即使渲染线程只能是一个。
wangtian2020
190 天前
因为 JavaScript 的 web api 里有能直接操作 DOM 的 API
cj323
189 天前
好问题,我之前也发现不只浏览器,web ,android ,ios 都是只有一个 UI thread 。

楼上说浏览器里面简单,但是用 C/C++/C#开发大型游戏的时候也只见过一个 Game loop 。

不知道有没有高人解答一下。
1Z3KYa0qBLvei98o
189 天前
https://stackoverflow.com/questions/3261370/is-main-thread-the-same-as-ui-thread

https://stackoverflow.com/questions/1652799/multiple-ui-threads-on-the-same-window

以前我也被别人问过为什么 win32 的主线程一般都是 UI 线程

1. 惯例 => 很多程序习惯这样设计了, 导致后面的一些列东西都是围绕这个惯例来的吧
而且 win32 背后其实是微软的操作系统级别的消息队列, 单个 UI thread 不断去 PeakMessage 就够了.
2. 不要在主线程里面做 data intensive 的操作, 否则会导致 卡顿
3. 就是多个 UI, 可能会有 race condtion.
1Z3KYa0qBLvei98o
189 天前
希望这里能 @vczh
1Z3KYa0qBLvei98o
189 天前
不负责任(根据本科组成原理的知识)盲答:

另外, 就算加入 GPU 来渲染, CPU 和 GPU 的工作机制, 早期是共享内存, 然后 DMA 去取, 考虑时序的话, 这本质上还是单个 UI thread + 消息队列就能解决的问题,

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1113556

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX