0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

峰會回顧第9期 | 移動應(yīng)用高級語言開發(fā)——并發(fā)探索

OpenHarmony TSC ? 來源:OpenHarmony TSC ? 作者:OpenHarmony TSC ? 2023-05-11 10:17 ? 次閱讀

演講嘉賓 | 李勇彪

回顧整理 | 廖 濤

排版校對 | 李萍萍

062b541c-efa2-11ed-878e-dac502259ad0.png

嘉賓簡介

李勇彪,OpenHarmony項(xiàng)目群技術(shù)指導(dǎo)委員會編程語言TSG成員,華為OpenHarmony虛擬機(jī)編譯器專家。2021年至今,華為終端OS語言編譯運(yùn)行時(shí)團(tuán)隊(duì)架構(gòu)師,負(fù)責(zé)OpenHarmony高級語言編譯運(yùn)行時(shí)的整體技術(shù)架構(gòu)。曾就職于阿里巴巴,參與并主導(dǎo)AliOS高級語言虛擬機(jī)的編譯優(yōu)化、內(nèi)存管理優(yōu)化、多線程優(yōu)化等項(xiàng)目。目前聚焦在移動OS的編程語言及語言虛擬機(jī)領(lǐng)域。

內(nèi)容來源

第一屆開放原子開源基金會OpenHarmony技術(shù)峰會——編程語言及應(yīng)用框架分論壇

正 文 內(nèi) 容

隨著摩爾定律放緩現(xiàn)象的日益突出以及計(jì)算機(jī)多核系統(tǒng)架構(gòu)的出現(xiàn),并發(fā)編程持續(xù)引起了廣泛的關(guān)注。目前,移動應(yīng)用領(lǐng)域的并發(fā)探索有哪些,在OpenHarmony上又有哪些成果和未來規(guī)劃呢?華為終端編譯器與運(yùn)行時(shí)架構(gòu)師李勇彪在第一屆OpenHarmony技術(shù)峰會上給大家?guī)砹藥c(diǎn)分享。

0646b702-efa2-11ed-878e-dac502259ad0.png

01?

并發(fā)的背景

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

069578ec-efa2-11ed-878e-dac502259ad0.png

摩爾定律放緩現(xiàn)象

那么,什么是并發(fā)呢?并發(fā)指同一時(shí)間應(yīng)對多項(xiàng)任務(wù)的能力,一個(gè)時(shí)間段中有幾個(gè)任務(wù)都處于運(yùn)行準(zhǔn)備就緒狀態(tài),在單核設(shè)備中,任一個(gè)時(shí)刻只有一個(gè)任務(wù)能夠運(yùn)行,其運(yùn)行順序是不固定的;而在多核場景中,同一時(shí)間可以多項(xiàng)任務(wù)并行。

06ce1ec2-efa2-11ed-878e-dac502259ad0.png

并發(fā)與并行

02?

常見的并發(fā)模型

2.1??

線程和鎖

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

06df7546-efa2-11ed-878e-dac502259ad0.png

一種 CPU 多核架構(gòu)

2.2??

Actor 模型

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

06edc4d4-efa2-11ed-878e-dac502259ad0.png

Actor 模型

2.3??

函數(shù)式編程

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

07012196-efa2-11ed-878e-dac502259ad0.png

函數(shù)式編程

2.4??

并發(fā)模型特點(diǎn)

常見的并發(fā)模型主要分為兩類,一類僅基于共享內(nèi)存,另一類則基于消息通信?;诠蚕韮?nèi)存的并發(fā)模型(線程與鎖),具有適用范圍廣、接近硬件工作方式的本質(zhì)和正確使用時(shí)效率很高的優(yōu)勢,但不可避免地存在測試及維護(hù)困難等問題,目前該模式已經(jīng)逐漸被應(yīng)用開發(fā)領(lǐng)域摒棄;基于消息通信的并發(fā)模型(Actor、函數(shù)式編程),具有容錯(cuò)性好、特定場景性能表現(xiàn)很好且易于維護(hù)和測試的優(yōu)勢,但也存在應(yīng)用場景有限、不適合細(xì)粒度并行等短板。

03?

移動應(yīng)用框架并發(fā)

3.1??

Dart 語言

Dart是一門新的編程語言,如同JAVA、PHP一樣,是為了解決編寫應(yīng)用程序中的一些實(shí)際問題而被Google發(fā)明的,其早期主要是為了能夠在Web領(lǐng)域替換JavaScript(后文簡稱JS),后來Google內(nèi)部用Dart編寫孵化了一個(gè)移動開發(fā)框架Sky,之后又被命名為Flutter,在移動跨平臺開發(fā)領(lǐng)域大放異彩。Dart的并發(fā)目標(biāo)主要為了賦能框架支持任務(wù)并行化,解決開發(fā)者的并發(fā)任務(wù)和多線程開發(fā)需求。其僅共享不可變對象,而可變對象不共享,且提供了單線程并發(fā)(異步)和多線程并發(fā)(Isolate Spawn /Compute)的并發(fā)API。

0717461a-efa2-11ed-878e-dac502259ad0.png

Dart 并發(fā)架構(gòu)

3.2??

Swift

Swift是蘋果公司于2014年WWDC蘋果開發(fā)者大會發(fā)布的新開發(fā)語言,可與Objective-C共同運(yùn)行于macOS和iOS平臺,用于搭建基于蘋果平臺的應(yīng)用程序。在2022年的Swift 5.5版本中,發(fā)布了并發(fā)API的說明,其并發(fā)目標(biāo)主要為了減少應(yīng)用開發(fā)者從想法到實(shí)現(xiàn)必須花費(fèi)的時(shí)間,使體驗(yàn)遠(yuǎn)遠(yuǎn)優(yōu)于現(xiàn)有方案(隊(duì)列不可知、可維護(hù)性差且安全性低)。Swift的并發(fā)理念是,共享可變狀態(tài)不利于開發(fā)者,也不利于硬件,且無法突破單進(jìn)程。因此,Swift希望能夠提供無損化的易用的API,在設(shè)計(jì)、可維護(hù)性、安全性、可伸縮性以及性能等方面持續(xù)改進(jìn)。目前,Swift已提供的API有async/await、Task & TaskGroup、Actor等。

3.3??

流行移動操作系統(tǒng)并發(fā)模型趨勢

在移動應(yīng)用開發(fā)領(lǐng)域中,迭代和更新頻繁,開發(fā)效率是一個(gè)關(guān)鍵因素,而鎖對于應(yīng)用開發(fā)者過于底層,很難用好,難以調(diào)試,屬于高級用法。出于提供易用、簡單、高效的并發(fā)模型考慮,業(yè)界目前給應(yīng)用開發(fā)者提供的多線程模型,有避免數(shù)據(jù)競爭、實(shí)現(xiàn)無鎖化的趨勢。例如,在Web上,JS在多線程使用的是消息通信機(jī)制(內(nèi)存隔離,增加可轉(zhuǎn)移Builtin對象支持);在Flutter上,Dart在多線程使用的是消息通信機(jī)制 (內(nèi)存隔離);在Android上,Kotlin原生先后提出過Worker API、不可變共享、對象轉(zhuǎn)移凍結(jié)等方案替換共享多線程方案(用戶不使用鎖);在IOS上,Swift 5.5實(shí)現(xiàn)了結(jié)構(gòu)化編程和Actor,Swift整體并發(fā)的演進(jìn)思路是默認(rèn)安全的編程模型。

04?

OpenHarmony高級語言的并發(fā)探索

在JS世界的并發(fā)中,如前文所提到的JS并發(fā)架構(gòu)—Actor模型,具有無鎖、容易維護(hù)和測試、容錯(cuò)性好以及分布式編程等優(yōu)勢,但啟動較慢,并發(fā)的實(shí)例開銷大。對于JS并發(fā)API—Worker來說,由于其每一個(gè)并發(fā)實(shí)例之間不共享,開發(fā)者需要封裝和解析消息命令,關(guān)心Worker實(shí)例的生命周期,在高負(fù)載和低負(fù)載時(shí)也需要精確調(diào)節(jié)Worker數(shù)量。

基于上述問題,OpenHarmony上實(shí)現(xiàn)了輕量化并發(fā)實(shí)例——Lite Actor。該功能支持不可變對象共享,對基礎(chǔ)架構(gòu)進(jìn)行了輕量化處理,大幅提升了啟動時(shí)間,且優(yōu)化了啟動內(nèi)存。

07243bfe-efa2-11ed-878e-dac502259ad0.png

ArkCompiler并發(fā)實(shí)例運(yùn)行

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

073c18aa-efa2-11ed-878e-dac502259ad0.png

TaskPool統(tǒng)一任務(wù)池設(shè)計(jì)架構(gòu)

在高級語言并發(fā)的發(fā)展中,業(yè)界更傾向于給開發(fā)者提供更易用、更好用以及更高效的并發(fā)API。OpenHarmony提供的并發(fā)API目前介于Dart和Swift之間,汲取兩者的長處,并對其現(xiàn)存問題進(jìn)行持續(xù)的優(yōu)化和改進(jìn)。此外,OpenHarmony正在考慮引入準(zhǔn)靜態(tài)對象,實(shí)現(xiàn)真正共享。

05?

總結(jié)

在OpenHarmony并發(fā)模型上,后續(xù)將對并發(fā)實(shí)例進(jìn)一步輕量化,探索共享對象的無鎖并發(fā)。此外,在OpenHarmony并發(fā)調(diào)度上,也將針對現(xiàn)存的系統(tǒng)中線程泛濫問題,從時(shí)間和空間兩個(gè)維度設(shè)計(jì)相關(guān)方案進(jìn)行優(yōu)化和改進(jìn),并將開發(fā)一套統(tǒng)一的并行框架,在運(yùn)行時(shí)根據(jù)任務(wù)依賴狀態(tài)和可執(zhí)行資源自動并發(fā)調(diào)度和執(zhí)行任務(wù)。

歡迎大家持續(xù)關(guān)注OpenHarmony并發(fā)研究工作,也期待與社區(qū)的開發(fā)者們共建OpenHarmony的并發(fā)能力。

E N D

審核編輯黃宇


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 語言開發(fā)
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    1103
  • 函數(shù)式編程
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    2053
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3548

    瀏覽量

    15743
收藏 人收藏

    評論

    相關(guān)推薦

    鴻蒙原生應(yīng)用元服務(wù)開發(fā)-初識倉頡開發(fā)語言

    強(qiáng)大的類型推斷能力,可以減少類型標(biāo)注工作,提高開發(fā)效率。 內(nèi)存安全 :倉頡編程語言支持自動內(nèi)存管理,并在運(yùn)行時(shí)進(jìn)行數(shù)組下標(biāo)越界檢查、溢出檢查等,確保運(yùn)行時(shí)內(nèi)存安全。 高效并發(fā) :倉頡編程語言
    發(fā)表于 08-15 10:00

    鴻蒙原生應(yīng)用元服務(wù)開發(fā)-初識倉頡開發(fā)語言

    強(qiáng)大的類型推斷能力,可以減少類型標(biāo)注工作,提高開發(fā)效率。 內(nèi)存安全 :倉頡編程語言支持自動內(nèi)存管理,并在運(yùn)行時(shí)進(jìn)行數(shù)組下標(biāo)越界檢查、溢出檢查等,確保運(yùn)行時(shí)內(nèi)存安全。 高效并發(fā) :倉頡編程語言
    發(fā)表于 07-30 17:49

    恩智浦舉辦汽車生態(tài)技術(shù)峰會,并發(fā)布全新S32 CoreRide開放平臺

    恩智浦半導(dǎo)體于杭州舉辦為期兩日的恩智浦汽車生態(tài)技術(shù)峰會并發(fā)布全新S32 CoreRide開放平臺。
    的頭像 發(fā)表于 05-31 09:23 ?2607次閱讀
    恩智浦舉辦汽車生態(tài)技術(shù)<b class='flag-5'>峰會</b>,<b class='flag-5'>并發(fā)</b>布全新S32 CoreRide開放平臺

    【大語言模型:原理與工程實(shí)踐】探索《大語言模型原理與工程實(shí)踐》2.0

    《大語言模型“原理與工程實(shí)踐”》是關(guān)于大語言模型內(nèi)在機(jī)理和應(yīng)用實(shí)踐的一次深入探索。作者不僅深入討論了理論,還提供了豐富的實(shí)踐案例,幫助讀者理解如何將理論知識應(yīng)用于解決實(shí)際問題。書中的案例分析有助于
    發(fā)表于 05-07 10:30

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)類庫多線程并發(fā)概述

    并發(fā)模型是用來實(shí)現(xiàn)不同應(yīng)用場景中并發(fā)任務(wù)的編程模型,常見的并發(fā)模型分為基于內(nèi)存共享的并發(fā)模型和基于消息通信的并發(fā)模型。 Actor
    發(fā)表于 03-28 14:35

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)類庫多線程并發(fā)概述

    并發(fā)模型是用來實(shí)現(xiàn)不同應(yīng)用場景中并發(fā)任務(wù)的編程模型,常見的并發(fā)模型分為基于內(nèi)存共享的并發(fā)模型和基于消息通信的并發(fā)模型。 Actor
    發(fā)表于 03-22 15:40

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)類庫多線程@Concurrent裝飾器校驗(yàn)并發(fā)函數(shù)

    在使用TaskPool時(shí),執(zhí)行的并發(fā)函數(shù)需要使用該裝飾器修飾,否則無法通過相關(guān)校驗(yàn)。從API version 9開始,該裝飾器支持在ArkTS卡片中使用。 裝飾器說明 裝飾器使用示例 import
    發(fā)表于 03-18 10:30

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)類庫概述

    ArkTS語言基礎(chǔ)類庫是HarmonyOS系統(tǒng)上為應(yīng)用開發(fā)者提供的常用基礎(chǔ)能力,主要包含能力如下圖所示。 1.提供異步并發(fā)和多線程并發(fā)的能力。 支持Promise和async/awa
    發(fā)表于 03-05 15:42

    第二屆大會回顧10 | 低時(shí)延分布式共享設(shè)備研究與探索

    演講嘉賓 | 杜? ?東 回顧整理 | 廖? ?濤 排版校對 | 李萍萍 ? 嘉賓介紹 ?OS內(nèi)核及視窗分論壇? 杜東 ,上海交通大學(xué)助理研究員,OpenHarmony項(xiàng)目群技術(shù)指導(dǎo)委員會并發(fā)與協(xié)同
    的頭像 發(fā)表于 02-25 17:52 ?467次閱讀
    第二屆大會<b class='flag-5'>回顧</b><b class='flag-5'>第</b>10<b class='flag-5'>期</b> | 低時(shí)延分布式共享設(shè)備研究與<b class='flag-5'>探索</b>

    你用過哪些編程語言開發(fā)單片機(jī)?

    C語言是最常用的一種用于單片機(jī)的開發(fā)語言,也是一種高級編程語言,具有較好的可移植性和可讀性。對于單片機(jī),通常使用嵌入式C來進(jìn)行
    發(fā)表于 12-04 10:18 ?976次閱讀

    羅姆(ROHM)4代:技術(shù)回顧

    羅姆(ROHM)4代:技術(shù)回顧
    的頭像 發(fā)表于 11-28 17:02 ?619次閱讀
    羅姆(ROHM)<b class='flag-5'>第</b>4代:技術(shù)<b class='flag-5'>回顧</b>

    HarmonyOS語言基礎(chǔ)類庫開發(fā)指南上線啦!

    語言基礎(chǔ)類庫提供哪些功能?多線程并發(fā)如何實(shí)現(xiàn)?TaskPool(任務(wù)池)和Worker在實(shí)現(xiàn)和使用場景上有何不同? 針對開發(fā)者關(guān)注的并發(fā)語言
    發(fā)表于 10-18 16:36

    HarmonyOS語言基礎(chǔ)類庫開發(fā)指南上線啦!

    語言基礎(chǔ)類庫提供哪些功能?多線程并發(fā)如何實(shí)現(xiàn)?TaskPool(任務(wù)池)和Worker在實(shí)現(xiàn)和使用場景上有何不同? 針對開發(fā)者關(guān)注的并發(fā)語言
    的頭像 發(fā)表于 10-18 16:20 ?429次閱讀
    HarmonyOS<b class='flag-5'>語言</b>基礎(chǔ)類庫<b class='flag-5'>開發(fā)</b>指南上線啦!

    更新 | 持續(xù)開源 迅為RK3568驅(qū)動指南第十一篇-pinctrl子系統(tǒng)

    教程更新至第十一篇 1篇 驅(qū)動基礎(chǔ)篇 2篇 字符設(shè)備基礎(chǔ) 3篇 并發(fā)與競爭 4篇 高級
    發(fā)表于 10-18 11:12

    峰會回顧32 | OpenHarmony在高校教學(xué)科研中的應(yīng)用

    演講嘉賓 | 陳? ?曦 回顧整理 | 廖? ?濤 排版校對 | 李萍萍 嘉賓簡介 陳曦,天津大學(xué)電氣自動化與信息工程學(xué)院副教授。長期從事人工智能、物聯(lián)網(wǎng)、電力系統(tǒng)相關(guān)教學(xué)和科研工作。主持和參與
    的頭像 發(fā)表于 10-10 10:27 ?846次閱讀
    <b class='flag-5'>峰會</b><b class='flag-5'>回顧</b><b class='flag-5'>第</b>32<b class='flag-5'>期</b> | OpenHarmony在高校教學(xué)科研中的應(yīng)用