演講嘉賓 | 李勇彪
回顧整理 | 廖 濤
排版校對 | 李萍萍
嘉賓簡介
李勇彪,OpenHarmony項目群技術指導委員會編程語言TSG成員,華為OpenHarmony虛擬機編譯器專家。2021年至今,華為終端OS語言編譯運行時團隊架構師,負責OpenHarmony高級語言編譯運行時的整體技術架構。曾就職于阿里巴巴,參與并主導AliOS高級語言虛擬機的編譯優(yōu)化、內(nèi)存管理優(yōu)化、多線程優(yōu)化等項目。目前聚焦在移動OS的編程語言及語言虛擬機領域。
內(nèi)容來源
第一屆開放原子開源基金會OpenHarmony技術峰會——編程語言及應用框架分論壇
正 文 內(nèi) 容
隨著摩爾定律放緩現(xiàn)象的日益突出以及計算機多核系統(tǒng)架構的出現(xiàn),并發(fā)編程持續(xù)引起了廣泛的關注。目前,移動應用領域的并發(fā)探索有哪些,在OpenHarmony上又有哪些成果和未來規(guī)劃呢?華為終端編譯器與運行時架構師李勇彪在第一屆OpenHarmony技術峰會上給大家?guī)砹藥c分享。

01?
并發(fā)的背景
摩爾定律由Intel的聯(lián)合創(chuàng)始人兼前CEO戈登·摩爾提出,即半導體芯片上集成的晶體管和電阻數(shù)量將每兩年增加一倍,微處理器的性能提高一倍,或價格下降一半。在過去的幾十年間,摩爾定律為算力乃至生產(chǎn)力的發(fā)展作出了巨大的貢獻,但至2022年,隨著Denard微縮效應遇到了元件物理的瓶頸,業(yè)界逐漸對這一觀點產(chǎn)生了強烈的分歧,一部分人士認為摩爾定律正在逐步放緩甚至有失效的傾向,另一部分人士認為摩爾定律仍然有效,僅是成本增加了。在該背景下,單芯片功耗約束了單核的性能,基于多核化的并發(fā)編程成為移動領域提升性能的重要技術手段。

摩爾定律放緩現(xiàn)象
那么,什么是并發(fā)呢?并發(fā)指同一時間應對多項任務的能力,一個時間段中有幾個任務都處于運行準備就緒狀態(tài),在單核設備中,任一個時刻只有一個任務能夠運行,其運行順序是不固定的;而在多核場景中,同一時間可以多項任務并行。

并發(fā)與并行
02?
常見的并發(fā)模型
2.1??
線程和鎖
線程和鎖是并發(fā)模型的一種常見表示,下圖示意了一種典型的CPU多核架構,可以看出,L3 Cache在多核間共享,因此L3 Cache的一致性是保證程序在多核間正常運行的基礎。在確保單線程執(zhí)行結果不變的前提下,可以做任意編譯器優(yōu)化,如常量傳播、公共子表達式消除、內(nèi)聯(lián)、標量替換、死代碼刪除、指令亂序等。由于不同的操作系統(tǒng)對內(nèi)存一致性有不同的約束,需要通使用鎖等同步語義保證多線程內(nèi)存一致性。目前,通過基于共享內(nèi)存的樂觀鎖、自旋鎖、偏向鎖、精準內(nèi)存屏障等手段可以實現(xiàn)性能優(yōu)秀的多線程程序,但也存在一定的問題:線程和鎖方案的優(yōu)化依賴軟件工程有良好的并發(fā)實踐規(guī)范和資深并發(fā)程序開發(fā)者,且容易引發(fā)死鎖,測試及維護的成本也很高。

一種 CPU 多核架構
2.2??
Actor 模型
Actor模型概念的提出已經(jīng)幾十年了:一個actor是一個基本的計算單元,通過消息通信;內(nèi)部維持可變狀態(tài),兩邊互相不能直接修改。其優(yōu)勢在于每個Actor易于維護以及測試,業(yè)務開發(fā)只需要關心業(yè)務的消息處理,測試只需要覆蓋消息流順序即可。此外,其容錯性也好,適合分布式編程。當然,Actor模型也存在一定的短板:存在信箱堆滿問題,不共享狀態(tài),只通過消息通信交互,不適合細粒度并行。

Actor 模型
2.3??
函數(shù)式編程
函數(shù)式編程有以下特點:函數(shù)是一等公民;無副作用(無共享可變狀態(tài));純函數(shù)構建一切。在函數(shù)式編程下,只要輸入一定,其輸出也一定符合預期。真實世界的函數(shù)式則更依賴參數(shù)化,會將函數(shù)副作用(Side Effect)上拋,盡量脫離開發(fā)者編寫的業(yè)務邏輯層,在框架內(nèi)部進行處理,且有結構依賴。該模式具有確定性、健壯性(易維護易測試)以及天然支持并行化等優(yōu)勢,但開發(fā)效率較低,實際的業(yè)務邏輯很難直接轉(zhuǎn)成函數(shù)式開發(fā),且在部分場景下性能表現(xiàn)較差。

函數(shù)式編程
2.4??
并發(fā)模型特點
常見的并發(fā)模型主要分為兩類,一類僅基于共享內(nèi)存,另一類則基于消息通信。基于共享內(nèi)存的并發(fā)模型(線程與鎖),具有適用范圍廣、接近硬件工作方式的本質(zhì)和正確使用時效率很高的優(yōu)勢,但不可避免地存在測試及維護困難等問題,目前該模式已經(jīng)逐漸被應用開發(fā)領域摒棄;基于消息通信的并發(fā)模型(Actor、函數(shù)式編程),具有容錯性好、特定場景性能表現(xiàn)很好且易于維護和測試的優(yōu)勢,但也存在應用場景有限、不適合細粒度并行等短板。
03?
移動應用框架并發(fā)
3.1??
Dart 語言
Dart是一門新的編程語言,如同JAVA、PHP一樣,是為了解決編寫應用程序中的一些實際問題而被Google發(fā)明的,其早期主要是為了能夠在Web領域替換JavaScript(后文簡稱JS),后來Google內(nèi)部用Dart編寫孵化了一個移動開發(fā)框架Sky,之后又被命名為Flutter,在移動跨平臺開發(fā)領域大放異彩。Dart的并發(fā)目標主要為了賦能框架支持任務并行化,解決開發(fā)者的并發(fā)任務和多線程開發(fā)需求。其僅共享不可變對象,而可變對象不共享,且提供了單線程并發(fā)(異步)和多線程并發(fā)(Isolate Spawn /Compute)的并發(fā)API。

Dart 并發(fā)架構
3.2??
Swift
Swift是蘋果公司于2014年WWDC蘋果開發(fā)者大會發(fā)布的新開發(fā)語言,可與Objective-C共同運行于macOS和iOS平臺,用于搭建基于蘋果平臺的應用程序。在2022年的Swift 5.5版本中,發(fā)布了并發(fā)API的說明,其并發(fā)目標主要為了減少應用開發(fā)者從想法到實現(xiàn)必須花費的時間,使體驗遠遠優(yōu)于現(xiàn)有方案(隊列不可知、可維護性差且安全性低)。Swift的并發(fā)理念是,共享可變狀態(tài)不利于開發(fā)者,也不利于硬件,且無法突破單進程。因此,Swift希望能夠提供無損化的易用的API,在設計、可維護性、安全性、可伸縮性以及性能等方面持續(xù)改進。目前,Swift已提供的API有async/await、Task & TaskGroup、Actor等。
3.3??
流行移動操作系統(tǒng)并發(fā)模型趨勢
在移動應用開發(fā)領域中,迭代和更新頻繁,開發(fā)效率是一個關鍵因素,而鎖對于應用開發(fā)者過于底層,很難用好,難以調(diào)試,屬于高級用法。出于提供易用、簡單、高效的并發(fā)模型考慮,業(yè)界目前給應用開發(fā)者提供的多線程模型,有避免數(shù)據(jù)競爭、實現(xiàn)無鎖化的趨勢。例如,在Web上,JS在多線程使用的是消息通信機制(內(nèi)存隔離,增加可轉(zhuǎn)移Builtin對象支持);在Flutter上,Dart在多線程使用的是消息通信機制 (內(nèi)存隔離);在Android上,Kotlin原生先后提出過Worker API、不可變共享、對象轉(zhuǎn)移凍結等方案替換共享多線程方案(用戶不使用鎖);在IOS上,Swift 5.5實現(xiàn)了結構化編程和Actor,Swift整體并發(fā)的演進思路是默認安全的編程模型。
04?
OpenHarmony高級語言的并發(fā)探索
在JS世界的并發(fā)中,如前文所提到的JS并發(fā)架構—Actor模型,具有無鎖、容易維護和測試、容錯性好以及分布式編程等優(yōu)勢,但啟動較慢,并發(fā)的實例開銷大。對于JS并發(fā)API—Worker來說,由于其每一個并發(fā)實例之間不共享,開發(fā)者需要封裝和解析消息命令,關心Worker實例的生命周期,在高負載和低負載時也需要精確調(diào)節(jié)Worker數(shù)量。
基于上述問題,OpenHarmony上實現(xiàn)了輕量化并發(fā)實例——Lite Actor。該功能支持不可變對象共享,對基礎架構進行了輕量化處理,大幅提升了啟動時間,且優(yōu)化了啟動內(nèi)存。

ArkCompiler并發(fā)實例運行
OpenHarmony也提供了TaskPool。TaskPool是一個更易用的并發(fā)任務API,能夠使開發(fā)者易于開發(fā)并發(fā)任務,減少代碼編寫量,讓其無需關心并發(fā)實例的生命周期和場景下并發(fā)任務的負載輕重。此外,TaskPool還能夠統(tǒng)一任務負載的資源管理,降低了系統(tǒng)的資源消耗,提升了系統(tǒng)的整體性能。在如圖所示的TaskPool架構中,通過Task Dispatch Manager實現(xiàn)優(yōu)先級調(diào)度、負載均衡以及系統(tǒng)的統(tǒng)一管理等功能,通過Task Worker Threads實現(xiàn)自適應性和可伸縮性。

TaskPool統(tǒng)一任務池設計架構
在高級語言并發(fā)的發(fā)展中,業(yè)界更傾向于給開發(fā)者提供更易用、更好用以及更高效的并發(fā)API。OpenHarmony提供的并發(fā)API目前介于Dart和Swift之間,汲取兩者的長處,并對其現(xiàn)存問題進行持續(xù)的優(yōu)化和改進。此外,OpenHarmony正在考慮引入準靜態(tài)對象,實現(xiàn)真正共享。
05?
總結
在OpenHarmony并發(fā)模型上,后續(xù)將對并發(fā)實例進一步輕量化,探索共享對象的無鎖并發(fā)。此外,在OpenHarmony并發(fā)調(diào)度上,也將針對現(xiàn)存的系統(tǒng)中線程泛濫問題,從時間和空間兩個維度設計相關方案進行優(yōu)化和改進,并將開發(fā)一套統(tǒng)一的并行框架,在運行時根據(jù)任務依賴狀態(tài)和可執(zhí)行資源自動并發(fā)調(diào)度和執(zhí)行任務。
歡迎大家持續(xù)關注OpenHarmony并發(fā)研究工作,也期待與社區(qū)的開發(fā)者們共建OpenHarmony的并發(fā)能力。
E N D
審核編輯黃宇
-
語言開發(fā)
+關注
關注
0文章
6瀏覽量
1143 -
函數(shù)式編程
+關注
關注
0文章
11瀏覽量
2137 -
OpenHarmony
+關注
關注
27文章
3835瀏覽量
18171
發(fā)布評論請先 登錄
華為李捷亮相MWC 2025并發(fā)表主題演講
大語言模型開發(fā)框架是什么
大語言模型開發(fā)語言是什么
OpenHarmony城市技術論壇第11期——香港站圓滿舉辦

華為宋曉迪出席自動駕駛網(wǎng)絡峰會
MCU編程語言和開發(fā)環(huán)境介紹
迅為iTOP-RK3568開發(fā)板驅(qū)動開發(fā)指南-第十八篇 PWM
go語言如何解決并發(fā)問題

第二屆大會回顧第25期 | OpenHarmony上的Python設備應用開發(fā)

2024 RISC-V 中國峰會:華秋電子助力RISC-V生態(tài)!
鴻蒙原生應用元服務開發(fā)-初識倉頡開發(fā)語言
鴻蒙原生應用元服務開發(fā)-初識倉頡開發(fā)語言
第二屆大會回顧第22期 軟件缺陷漏洞分析

評論