问题

如何评价 Webkit 推出的并发 JavaScript 提案?

回答
WebKit 最近提出的并发 JavaScript 提案,如果能顺利落地,将是 JavaScript 语言演进中一件相当令人瞩目的事情。长期以来,JavaScript 在浏览器端的执行模型都是单线程的,虽然通过 Web Workers 提供了创建独立工作线程的能力,但它们之间的通信机制,尤其是共享内存的复杂性和潜在的竞态条件,一直是开发者们需要小心翼翼处理的痛点。

这个新的并发提案,顾名思义,就是要让 JavaScript 能够更直接、更自然地利用多核处理器的优势。它不是简单地将 Web Workers 包装得更易用,而是尝试在语言层面解决并发带来的核心挑战。

核心的突破点在于对“共享”概念的重新定义和控制。传统的 Web Workers 之间传递数据,本质上是数据的复制或者序列化/反序列化,这在处理大量数据时会带来性能损耗。而并发 JavaScript 提案则引入了一种更精细的共享机制,允许数据在多个执行上下文(可以理解为“并发的 JavaScript 环境”)之间被“转移”或者“共享”,但关键在于,这种共享是经过设计的,能够避免或最小化不安全的并发访问。

你可以想象一下,过去如果你想让一个 worker 修改另一个 worker 使用的数据,你必须将数据发送过去,然后将修改后的数据再发送回来,中间的过程充满了拷贝和序列化。而新的提案则可能允许你将数据的“所有权”或者“访问权”在不同的执行上下文之间安全地传递,甚至是在特定条件下进行共享读写。这就好比你可以把一个工具箱交给另一个人使用,而不是把工具箱里的每一个工具都复制一份给他。

这个提案的另一个重要方面是它对“隔离”的处理。虽然强调并发,但 JavaScript 的核心优势之一就是其强大的沙箱隔离机制。新的并发模型需要在这两者之间找到一个平衡点。提案中可能涉及一些新的语法糖或者 API,用于声明哪些数据是可变的,哪些数据是不可变的,以及如何安全地在不同的并发上下文中传递这些数据。这有助于开发者在编码时就明确并发的风险点,并采取相应的措施。

举个例子,或许会有 `transfer` 关键字,让你明确地将一个对象的所有权转移给另一个 worker,这样原先的上下文就无法再访问它,从而避免了双重修改的可能。或者,可能会有一些机制允许安全地共享不可变数据,因为不可变数据天然就不会引起并发问题。

当然,任何对 JavaScript 核心执行模型的改变都会伴随着巨大的挑战。首先是兼容性问题。如何在保持向后兼容的同时引入这些新特性,将是一个巨大的工程。然后是开发者心智模型的改变。JavaScript 开发者习惯了单线程的直观性,突然要面对并发,需要时间去理解和掌握新的编程范式。

从性能的角度看,这个提案如果成功,无疑将为 JavaScript 在客户端和服务器端(Node.js 也可以借鉴)的应用带来质的飞跃。想象一下,那些需要大量计算、频繁数据处理的应用,比如游戏引擎、图形渲染、大规模数据分析,如果能够充分利用多核优势,其表现将会非常惊艳。

不过,也需要警惕的是,过于复杂的并发模型可能会适得其反,增加开发难度,引入难以调试的 bug。WebKit 的目标很可能是找到一个“恰到好处”的平衡,既能释放并发的威力,又不至于让 JavaScript 变得难以驾驭。

总的来说,WebKit 的这个并发 JavaScript 提案,代表了 JavaScript 想要突破单线程瓶颈,真正成为一门全能型语言的雄心。它瞄准的是 JavaScript 生态系统中最棘手的问题之一,一旦成功,将对 Web 应用的性能和复杂性产生深远的影响,值得我们持续关注和期待。

网友意见

user avatar

谢邀。【唉,吃个生日蛋糕也不省心,被硬邀读这么硬的文章,而且那些细节好艰深……R大救我!还要评价,我要立了 flag,万一以后 thread 真进了 ES 标准,不是被打脸嘛……算了,反正我皮厚。】


目前应该还不是正式的提案,只是 Apple 的人放出来秀肌肉(技术实力)的。『别看 V8 那么多人,还不是我们 Apple 才搞出来这个大新闻?』


但我个人不是很看好这个。

第一是在实现上的复杂性。Apple 说能搞定,但说起来容易做起来难。所谓『搞定』很重要一点是不造成 performance regression。这是为什么这篇 blog 如此之长 —— 很长篇幅是用来谈实现细节的,意思是我们能做到,你们(v8、chakra、monkey)不好意思说不行吧!然而即使 Apple 自信满满,其他引擎的人未必买账。这个事情过去也不是没发生过。PTC(尾调用优化),Chakra 的人说加 PTC 会影响我们的性能,Apple 的人都冲到 Chakra 的 repo 里亲自 review,就差手把手教写代码了,但最终还是没有卵用,说不实现就不实现。再比如 private field 之所以不能采用一般的 private 关键字写法,很大一个原因是对属性访问加可见性检查对性能会有严重影响。而这文章里也提到了,要上 Thread,如果给所有属性访问 naive 的全加 lock,性能马上下降 7、8 倍,甚至在 fastpath 下降 20 倍以上。固然 Apple 的人然后又说了他们如何牛逼的做到几乎没有性能损失,但那些优化方式对其他引擎来说未必适用,适用也未必能实现,能实现也未必成本可接受……毕竟这东西太复杂,涉及到许多底层且牵一发动全身的东西,比如 GC。

第二是对 JS 编程模型的影响。加入 Thread 显然会破坏 run-to-completion 语义。注意这和 SharedArrayBuffer 的区别。SharedArrayBuffer 虽然也不遵循 rtc,但范围仅限于 SharedArrayBuffer 对象,而且绝大部分 JSer 是用不到 SharedArrayBuffer 的,甚至都很少用 workers。扩展到所有 object 显然是另一回事情,对 JS 的编程模型影响巨大。这文章里说通过保障一些底层操作是原子的来确保遵循 JS 对象模型的 invariants。但我很怀疑是否能确保所有当前 spec 里规定的 invariants。如果仔细看过 spec 或看过 262 的一些 testcases,就会发现很多 invariants 可不是单个的原子操作可以确保的。无论如何,就算真要上 Thread,我个人比较 prefer 类似 SharedArrayBuffer 的方式,比如弄个 SharedObject,或者用 Thread.share(o) 来开启(跟此文中用 Thread.restrict(o) 来限制反一下)。

第三是语义上的复杂性。比如,根据当前 Apple 的提案,o.f 在简单 own prop 时是原子的,但是如果是原型上的 prop ,或者是 getter 就不是原子的了。当然,其实这也不是很重要,毕竟既然决定要上 Thread,必定要接触这些麻烦事。

最后,也是最重要的,是新特性的必要性。在已经有 SharedArrayBuffer 的前提下,我看不出加入 Thread 的必要性。有什么事情是 Thread 能而现有的 SharedArrayBuffer + Worker 不能(以同样性能达成)的吗?恐怕没有,最多就是写起来麻烦。实际上,worker 和 thread 本质上是相同的,区别只是 worker 默认不共享(想要共享你得自己构造 SharedArrayBuffer 传进去),thread 默认共享。Thread 对程序员的好处主要是模型比较成熟,可以照搬其他语言的经验,甚至直接移植库。但我个人认为,反正是 low-level,反正都要小心翼翼处理,能搞得定 thread 的程序员没理由搞不定 worker + SharedArrayBuffer,因此这优点很不明显。何况还有直接从 C++/Rust 之类编译到 asm.js / WebAssembly 的选择,既然是编译,管他最后用的是 wasm 还是 SharedArrayBuffer + worker 还是 Thread 呢?即使真的要改进 JS 中的 concurrent 编程体验,我宁可选择优先改善现有的机制,比如增加基于 (Shared)ArrayBuffer 的 UTF8StringView 和 struct,增加 Immutable 数据类型(从而可以安全的在多个 workers 中共享)……这些特性在实现上对引擎实现和编程模型的影响比 Thread 应该要小很多。而且即使将来还是要上 Thread,也仍然是有用的特性。也就是说我认为这些特性可以有更高的优先级。

总之,任何一份新特性的提案,首要的不是技术上的可行性,而是先要列出令人信服的 use cases 及现有特性为何不能解决这些 use cases 或有何不足。而这是这篇 blog 所欠奉的。


以上。

user avatar

我还以为Thread是邪路是早已经达成了的共识了来的……

类似的话题

  • 回答
    WebKit 最近提出的并发 JavaScript 提案,如果能顺利落地,将是 JavaScript 语言演进中一件相当令人瞩目的事情。长期以来,JavaScript 在浏览器端的执行模型都是单线程的,虽然通过 Web Workers 提供了创建独立工作线程的能力,但它们之间的通信机制,尤其是共享内.............
  • 回答
    Windows Phone 8.1 Update 1 更新引入的 IE11 对 `webkit` 前缀 CSS 代码的处理方式,可以说是微软在试图平衡历史包袱与向前兼容之间一次相当有趣的妥协。在此更新之前,IE 浏览器,特别是 Windows Phone 上的 IE,在支持 CSS 标准方面一直显得.............
  • 回答
    《睡前消息》409期作为一档以“睡前”为名的时事评论节目,其内容通常以轻松幽默的风格呈现社会热点、科技动态、文化现象等话题,旨在为观众提供睡前的“信息快餐”。以下是对该期节目可能涉及的分析框架和评价方向,结合其节目特点及社会语境进行详细解读: 1. 节目核心内容与选题分析 选题热点:409期可能聚焦.............
  • 回答
    俄罗斯军队在2022年2月24日入侵乌克兰后,21天内未能占领或包围基辅,这一结果涉及复杂的军事、战略和国际因素。以下从多个维度详细分析这一现象: 1. 初期快速推进的军事目标与战略调整 初期目标的矛盾性: 俄罗斯在入侵初期(2月24日)宣称“特别军事行动”的目标是“去纳粹化”和“去俄化”,但.............
  • 回答
    新华社的《破除美国金融模式迷信,中国金融要走自己的路》一文,是近年来中国在金融领域强调自主性、独立性和战略定力的重要政策表达。该文从历史经验、现实挑战和未来战略三个维度,系统阐述了中国金融发展的路径选择,具有鲜明的现实针对性和理论深度。以下从多个角度对这篇文章进行详细分析: 一、文章背景与核心论点1.............
  • 回答
    2022年俄乌战争爆发后,中国互联网上确实出现了一些复杂的现象,既有官方立场的引导,也有民间舆论的分化。以下从多个角度分析这一时期中国互联网的乱象及其背后的原因: 一、官方立场与网络管控1. 官方舆论引导 中国政府明确表态支持乌克兰的主权和领土完整,同时强调“不干涉内政”的原则。在社交媒体和.............
  • 回答
    陈道明、王志文、陈宝国、张国立、李雪健是中国影视界最具代表性的“老戏骨”之一,他们以深厚的表演功底、多样的角色塑造和持久的行业影响力,成为中国影视艺术的中流砥柱。以下从表演风格、代表作、行业地位及艺术贡献等方面进行详细分析: 一、陈道明:历史剧的“帝王”与艺术的“多面手”表演特点: 陈道明以“沉稳.............
  • 回答
    《为战争叫好的都是傻逼》这类文章通常以强烈的反战立场和道德批判为核心,其评价需要从多个维度进行分析,包括其立场的合理性、论据的逻辑性、社会影响以及可能存在的争议。以下从不同角度展开详细分析: 1. 文章的核心立场与立场合理性 立场:这类文章的核心观点是战争本质上是道德上不可接受的,支持战争的人(尤其.............
  • 回答
    龙云(1882年-1967年)是20世纪中国西南地区的重要军阀和政治人物,被尊称为“云南王”,其统治时期(1920年代至1940年代)对云南的现代化进程和民族关系产生了深远影响。以下从多个维度对其历史地位和影响进行详细分析: 一、生平与政治背景1. 出身与早期经历 龙云出生于云南昆明,出身于.............
  • 回答
    关于“前三十年的工业化是一堆破铜烂铁”的说法,这一评价需要结合历史背景、经济政策、技术条件以及国际环境等多方面因素进行深入分析。以下从多个角度展开讨论: 一、历史背景与“前三十年”的定义“前三十年”通常指中国从1949年新中国成立到1979年改革开放前的30年。这一时期,中国在经济、政治、社会等方面.............
  • 回答
    十元左右的低档快餐店顾客以男性为主的现象,可以从经济、社会文化、消费行为、地理位置等多方面进行分析。以下从多个角度详细探讨这一现象的原因及可能的背景: 1. 经济因素:价格敏感与消费习惯 性价比优先:十元左右的快餐通常以快速、便宜、标准化为特点,符合低收入群体或日常通勤人群的消费需求。男性在职场中可.............
  • 回答
    阎学通教授对00后大学生以“居高临下”心态看待世界这一批评,可以从多个维度进行深入分析,其背后既有学术视角的考量,也涉及代际差异、教育体系、社会环境等复杂因素。以下从观点解析、合理性分析、现实背景、潜在影响及改进方向等方面展开详细探讨: 一、阎学通教授的核心观点与逻辑1. “居高临下”的具体表现 .............
  • 回答
    歼8系列战机是中国在20世纪70年代至80年代期间研制的高空高速歼击机,是当时中国航空工业的重要成果之一。该系列战机在冷战时期具有显著的军事意义,但随着技术发展和国际形势变化,其性能和作用逐渐被后续机型取代。以下从历史背景、技术特点、性能分析、发展演变、军事影响及评价等方面进行详细解析: 一、历史背.............
  • 回答
    关于苏翻译和Black枪骑兵对俄乌战争局势的立场差异,需要明确的是,这两位身份可能涉及不同的信息来源和立场背景。以下从多个角度分析他们观点差异的可能原因: 1. 信息来源与立场定位 苏翻译(可能指苏晓康,中国《经济学人》翻译团队成员): 立场:更倾向于国际法、人道主义和多边主义视角。 观点:.............
  • 回答
    由于无法直接访问《睡前消息》第409期的具体内容(可能因平台更新、用户输入误差或节目名称不明确导致无法准确检索),以下将基于对“睡前消息”类节目的常见结构和主题进行推测性分析,并提供一般性的评价框架。若您有更具体的背景信息(如节目来源、发布时间等),可补充说明以便更精准回答。 一、节目内容推测(基于.............
  • 回答
    明成祖朱棣(14021424年在位)五次北伐漠北(今蒙古高原)是明王朝巩固北方边疆、遏制蒙古势力的关键历史事件。这一系列军事行动不仅体现了朱棣的军事才能,也深刻影响了明朝的边疆政策、内政格局和历史走向。以下从历史背景、军事行动、结果评价及历史影响等方面详细分析: 一、历史背景1. 政治合法性与边疆安.............
  • 回答
    2022年的俄乌战争是21世纪最具全球影响力的冲突之一,其规模、持续时间、国际影响和人道主义灾难远超以往。以下从多个维度对这场战争进行详细分析: 一、战争爆发的背景与起因1. 历史渊源 俄乌冲突的根源可追溯至2014年克里米亚危机和顿巴斯战争,俄罗斯在2014年吞并克里米亚并支持顿巴斯分离.............
  • 回答
    关于美国国务卿布林肯和波兰总统对北约向乌克兰提供战机的表态,这一问题涉及地缘政治、军事战略、国内政治和国际关系等多重因素。以下从多个角度进行详细分析: 一、背景与核心争议1. 乌克兰的军事需求 乌克兰自2022年俄乌冲突爆发以来,面临俄罗斯的军事压力,急需先进武器装备以增强防御能力。战机(尤.............
  • 回答
    亚投行(亚洲基础设施投资银行,AIIB)在2022年俄乌冲突爆发后,确实对在俄罗斯和白俄罗斯的项目进行了暂停和审查,这一举措引发了国际社会的广泛关注。以下从背景、原因、影响及评价多个角度进行详细分析: 一、事件背景1. 俄乌冲突的国际影响 2022年2月,俄罗斯入侵乌克兰,引发西方国家对俄罗.............
  • 回答
    俄乌冲突中的俄军指挥体系和行动表现是一个复杂的问题,涉及军事战略、指挥结构、后勤保障、情报系统等多个方面。以下从多个角度对俄军指挥进行详细分析: 一、指挥体系结构1. 中央指挥链 俄军的指挥体系以中央军区(俄联邦安全局)和西部军区(负责乌克兰东部战区)为核心,由总参谋部协调。 总参.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有