91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

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

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

關(guān)于Actor并發(fā)模型的解析

HarmonyOS開發(fā)者 ? 來源:HarmonyOS開發(fā)者 ? 作者:wengchangcheng ? 2022-07-18 09:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

并發(fā)模型是用來實(shí)現(xiàn)不同應(yīng)用場景中并發(fā)任務(wù)的編程模型,通過合理地使用多線程,可以縮減應(yīng)用程序的開發(fā)和維護(hù)成本,同時(shí)還能更好地提升應(yīng)用程序在多核設(shè)備中的運(yùn)行性能。隨著IoT時(shí)代下應(yīng)用場景的不斷復(fù)雜、多核設(shè)備的不斷增多,并發(fā)模型顯得舉足輕重,本期我們將為大家?guī)矸街劬幾g器對傳統(tǒng)Actor并發(fā)模型的輕量級優(yōu)化。

一、什么是并發(fā)模型?

操作系統(tǒng)中,并發(fā)是任務(wù)在不影響最終執(zhí)行結(jié)果的情況下無序或者按部分順序執(zhí)行的能力,如圖1所示,在一個(gè)時(shí)間段中可能有多個(gè)任務(wù)都處于已啟動運(yùn)行到運(yùn)行完畢之間,同時(shí),并發(fā)單元也可以在多核設(shè)備下并行執(zhí)行,可以極大地提高多核設(shè)備的運(yùn)行性能。

33e08234-0636-11ed-ba43-dac502259ad0.png

圖1 并發(fā)單元的并行執(zhí)行

在日常開發(fā)中,由于并發(fā)任務(wù)多種多樣,任務(wù)拆分方式可能不同,線程間的通信方式也可能不同,所以不同場景下的多線程并發(fā)任務(wù)可以通過不同的并發(fā)編程模型來實(shí)現(xiàn)。常見的并發(fā)模型又分為內(nèi)存共享的并發(fā)模型和消息通信的并發(fā)模型。其中,基于內(nèi)存共享的并發(fā)模型存在數(shù)據(jù)競爭,往往需要鎖或者其它同步機(jī)制來保護(hù)共享的可變數(shù)據(jù)。而基于消息通信的并發(fā)模型,不需要開發(fā)者去面對鎖帶來的一系列復(fù)雜偶發(fā)的問題,同時(shí)并發(fā)度也相對較高。

作為基于消息通信并發(fā)模型的典型代表,Actor并發(fā)模型深受廣大開發(fā)者的追捧。下面,我們將為大家?guī)鞟ctor并發(fā)模型的解析。

二、Actor并發(fā)模型

Actor是一種歷史悠久的分布式并發(fā)模型,基于事件(消息)機(jī)制傳遞數(shù)據(jù),能有效地避免線程中資源爭奪、死鎖等情況。本節(jié)我們將為大家介紹Actor并發(fā)模型的交互原理以及在JS中的應(yīng)用。

1. 交互原理

如圖2所示,在典型的Actor交互流程中,各個(gè)Actor并發(fā)地處理主線程任務(wù),每個(gè)Actor內(nèi)部都有一個(gè)消息隊(duì)列及單線程執(zhí)行模塊,消息隊(duì)列負(fù)責(zé)接收主線程及其他Actor的請求,單線程執(zhí)行模塊則負(fù)責(zé)串行地處理請求、向其他Actor發(fā)送請求以及創(chuàng)建新的Actor。由于Actor采用的是異步方式,各個(gè)Actor之間相互隔離沒有數(shù)據(jù)競爭,因此Actor可以高并發(fā)運(yùn)行。

33f7d09c-0636-11ed-ba43-dac502259ad0.png

圖2 Actor交互流程

2. 應(yīng)用場景

Actor并發(fā)模型被廣泛應(yīng)用于Erlang、Haskell、Akka(Java)、JS等編程語言,下面我們將介紹Actor并發(fā)模型在JS中的應(yīng)用。

(1) Worker介紹

眾所周知,JS從誕生起就是單線程,為解決因單線程造成的I/O阻塞問題,JS通過異步回調(diào)的方式并結(jié)合事件機(jī)制,充分提高了單線程下對于輕量級事件的響應(yīng)速度。但是如果遇到某些比較復(fù)雜的任務(wù),比如CPU密集型運(yùn)算任務(wù)、I/O密集型任務(wù)、同步任務(wù)等,仍采用單線程執(zhí)行就顯得有點(diǎn)力不從心,無法解決復(fù)雜任務(wù)的線程阻塞問題。所以,JS需要引入多線程任務(wù)支持。

Worker是較為典型的JS多線程解決方案,基于Actor并發(fā)模型實(shí)現(xiàn),為JS創(chuàng)造多線程并發(fā)環(huán)境。如圖3所示,在Worker的交互流程中,JS主線程可以創(chuàng)建多個(gè)Worker子線程,各個(gè)Worker線程間相互隔離,并通過序列化傳遞對象,等到 Worker 線程完成計(jì)算任務(wù),再把結(jié)果返回給主線程。

34107480-0636-11ed-ba43-dac502259ad0.png

圖3 Worker交互流程

(2) Worker缺陷

Worker實(shí)現(xiàn)了復(fù)雜JS應(yīng)用的多線程并發(fā)執(zhí)行,在一定程度上提升了復(fù)雜JS應(yīng)用的運(yùn)行效率。但是,由于每個(gè)Worker線程都擁有獨(dú)立的虛擬機(jī)實(shí)例,且各個(gè)實(shí)例之間不共享任何數(shù)據(jù),使得JS Worker啟動速度較慢、內(nèi)存占用較高。

三、Lite Actor

為了讓JS應(yīng)用能充分利用多核設(shè)備的計(jì)算能力更好地提升性能,方舟編譯器提出了Lite Actor概念,并針對Worker的缺陷進(jìn)行了優(yōu)化。

1.原理介紹

方舟編譯器JS運(yùn)行時(shí)在傳統(tǒng)Actor并發(fā)模型的基礎(chǔ)上,通過共享Actor實(shí)例中的不可變對象,以減少每個(gè)Actor實(shí)例承載的數(shù)據(jù),提升了每個(gè)Actor的運(yùn)行性能,從而實(shí)現(xiàn)Actor并發(fā)模型的輕量級優(yōu)化。

3427dbf2-0636-11ed-ba43-dac502259ad0.png

圖4 Lite Actor

2. Worker優(yōu)化

方舟編譯器JS運(yùn)行時(shí)基于Lite Actor概念對Worker進(jìn)行了優(yōu)化,具體優(yōu)化如下:

●方舟編譯器JS運(yùn)行時(shí)通過內(nèi)置的字節(jié)碼文件管理器,已完成了對多個(gè)Worker間緩存的字節(jié)碼文件的共享,大大減少了字節(jié)碼的預(yù)加載處理時(shí)間以及內(nèi)存占用。

●方舟編譯器JS運(yùn)行時(shí)結(jié)合TS類型分析系統(tǒng)與對象分離技術(shù),已經(jīng)實(shí)現(xiàn)了Worker中部分TS類型信息與準(zhǔn)靜態(tài)類型信息的識別與共享,在一定程度上減少Worker線程的內(nèi)存使用以及Worker線程間的信息傳遞耗時(shí)。同時(shí),由于已共享的部分無需進(jìn)行序列化拷貝傳遞,所以Worker的序列化時(shí)長也得到了相應(yīng)的優(yōu)化。目前,剩余未共享部分?jǐn)?shù)據(jù)仍存在很大的提升空間,這部分工作仍會持續(xù)展開,讓我們共同期待。

●針對外部內(nèi)存的數(shù)據(jù),例如字節(jié)碼中的字符串,由于不受JS內(nèi)存管理,未來也可以實(shí)現(xiàn)共享。

34342542-0636-11ed-ba43-dac502259ad0.png

圖5 Worker優(yōu)化

3. 性能對比

使用方舟編譯器的Lite Actor優(yōu)化后,Worker的性能得到了顯著的增長,如圖6所示,不難看出,相較于傳統(tǒng)Actor并發(fā)模型,Worker的啟動時(shí)長及內(nèi)存占用均優(yōu)化了50%以上。

34460d8e-0636-11ed-ba43-dac502259ad0.png

圖6 性能及內(nèi)存對比

以上就是本期全部內(nèi)容,方舟編譯器JS運(yùn)行時(shí)通過對傳統(tǒng)Actor并發(fā)模型的輕量級優(yōu)化,極大地提高了Worker的啟動性能。當(dāng)前Lite Actor仍有很大的探索空間,期待廣大開發(fā)者加入我們,共同見證萬物互聯(lián)的無限可能。

審核編輯:湯梓紅

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

    關(guān)注

    1

    文章

    3519

    瀏覽量

    50416
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1662

    瀏覽量

    50209
  • 方舟
    +關(guān)注

    關(guān)注

    0

    文章

    20

    瀏覽量

    8618

原文標(biāo)題:Lite Actor:方舟Actor并發(fā)模型的輕量級優(yōu)化

文章出處:【微信號:HarmonyOS_Dev,微信公眾號:HarmonyOS開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

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

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

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

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

    鴻蒙5開發(fā)寶藏案例分享---應(yīng)用并發(fā)設(shè)計(jì)

    到性能調(diào)優(yōu),這些案例都是華為工程師的血淚經(jīng)驗(yàn)結(jié)晶。下面用最直白的語言+代碼示例,帶你玩轉(zhuǎn)HarmonyOS并發(fā)開發(fā)! ?一、ArkTS并發(fā)模型:顛覆傳統(tǒng)的設(shè)計(jì) 傳統(tǒng)模型痛點(diǎn) graph
    發(fā)表于 06-12 16:19

    sushu---Actor Framework基本介紹

    一練]Actor Framework框架(1125-1201)2016-02-28 20:15:20新寫的一篇帖子:sushu---Actor Framework一種使用方式主貼里面循序漸進(jìn)的介紹了一些信息。現(xiàn)在
    發(fā)表于 01-03 20:05

    Actor Framework -- Test Sequence

    本帖最后由 shenjianym 于 2019-10-29 08:13 編輯 用Actor Framework框架寫了一個(gè)關(guān)于測試序列(生成隨機(jī)數(shù)并判斷)的程序。該程序使用的是LabVIEW2017版本,加2017版JKL狀態(tài)機(jī)。注:程序跑第二次的時(shí)候會出現(xiàn)BUG,
    發(fā)表于 10-28 15:28

    ActorFramework在測控設(shè)備上的應(yīng)用

    Actor模型是1973年提出的一個(gè)分布式并發(fā)編程模式,在Erlang語言中得到廣泛支持和應(yīng)用。在Actor模型中,
    發(fā)表于 05-27 09:04

    Actor框架介紹

    Actor Framework是一個(gè)軟件類庫,適用于多線程應(yīng)用程序,每個(gè)操作者(Actors)執(zhí)行獨(dú)立的線程任務(wù),操作者本身可以傳遞消息也可以在操作者之間傳遞消息。1.右鍵我的電腦新建--操作者2.
    發(fā)表于 01-13 22:10

    Lite Actor:方舟Actor并發(fā)模型的輕量級優(yōu)化

    基于消息通信并發(fā)模型的典型代表,Actor并發(fā)模型深受廣大開發(fā)者的追捧。下面,我們將為大家?guī)?b class='flag-5'>Actor
    發(fā)表于 07-18 12:00

    移動應(yīng)用高級語言開發(fā)——并發(fā)探索

    并發(fā)架構(gòu)—Actor模型,具有無鎖、容易維護(hù)和測試、容錯(cuò)性好以及分布式編程等優(yōu)勢,但啟動較慢,并發(fā)的實(shí)例開銷大。對于JS并發(fā)API—Work
    發(fā)表于 08-28 17:08

    HarmonyOS使用多線程并發(fā)能力開發(fā)

    一、多線程并發(fā)概述 1、簡介 并發(fā)模型是用來實(shí)現(xiàn)不同應(yīng)用場景中并發(fā)任務(wù)的編程模型,常見的并發(fā)
    發(fā)表于 09-25 15:23

    七種常見的并發(fā)編程模型簡介

    1. 線程與鎖 線程與鎖模型有很多眾所周知的不足,但仍是其他模型的技術(shù)基礎(chǔ),也是很多并發(fā)軟件開發(fā)的首選。 2. 函數(shù)式編程 函數(shù)式編程日漸重要的原因之一,是其對并發(fā)編程和并行編程提供了
    的頭像 發(fā)表于 03-15 17:21 ?4910次閱讀

    Go并發(fā)模型的實(shí)現(xiàn)原理

    Go語言是為并發(fā)而生的語言,Go語言是為數(shù)不多的在語言層面實(shí)現(xiàn)并發(fā)的語言;也正是Go語言的并發(fā)特性,吸引了全球無數(shù)的開發(fā)者。
    的頭像 發(fā)表于 04-15 08:49 ?1628次閱讀

    在LabVIEW中創(chuàng)建Actor Framework的抽象消息及接口

    由于面向?qū)ο笮枰档婉詈闲裕敲椿陬惖牟僮髡咭残枰紤]如何降低耦合性。當(dāng)Nest Actor給Root Actor發(fā)送消息時(shí),需要調(diào)用Root Actor的消息類的Send ***.vi,這就導(dǎo)致了Nest
    的頭像 發(fā)表于 09-23 10:51 ?8641次閱讀

    NVIDIA Triton 系列文章(10):模型并發(fā)執(zhí)行

    前面已經(jīng)做好了每個(gè)推理模型的基礎(chǔ)配置,基本上就能正常讓 Triton 服務(wù)器使用這些獨(dú)立模型進(jìn)行推理。接下來的重點(diǎn),就是要讓設(shè)備的計(jì)算資源盡可能地充分使用,首先第一件事情就是模型并發(fā)執(zhí)
    的頭像 發(fā)表于 01-05 11:55 ?1559次閱讀

    基于Actor Framework仿真線性編碼器

    在學(xué)習(xí)LabView面向?qū)ο缶幊踢^程中,相信大家也都接觸到了Actor Framework。該框架于2010年NI Week首次公布,經(jīng)過多年不斷迭代更新,逐漸成為LabVIEW中最為重要的并發(fā)開發(fā)框架。
    的頭像 發(fā)表于 12-22 10:15 ?1631次閱讀
    基于<b class='flag-5'>Actor</b> Framework仿真線性編碼器
    主站蜘蛛池模板: 欧美黄色片网站 | 天堂一区二区三区在线观看 | 亚洲天堂免费看 | 美女免费观看一区二区三区 | 奇米影视777欧美在线观看 | 国产精品久久久久天天影视 | 牛牛a级毛片在线播放 | 午夜影院0606免费 | 成人国内精品久久久久影院 | 人人洗澡人人洗澡人人 | 免费观看视频网站 | 日日艹| 日本丰满毛茸茸熟妇 | 永久精品免费影院在线观看网站 | 黄色一级大片视频 | 婷婷六月丁香色婷婷网 | 狠狠躁夜夜躁人人躁婷婷视频 | 一级毛片黄色片 | 免费高清视频免费观看 | 亚洲一区二区三区四区在线观看 | 五月婷婷婷 | 国产精品电影一区 | 国产精品福利一区二区亚瑟 | 久久久久国产免费 | 免费一级特黄特色大片 | 中国国产aa一级毛片 | 国产小视频在线看 | 狠狠色噜噜狠狠狠狠色综合久 | 国产一区二区高清在线 | 一卡二卡四卡无卡乱免费网页 | 天天躁日日躁狠狠躁中文字幕老牛 | 天天射天天干天天操 | 色聚网久久综合 | 在线天堂资源www中文在线 | 夜色福利 | 天天干天天操天天玩 | 中文字幕欧美日韩 | www永久免费视频 | 久久亚洲aⅴ精品网站婷婷 久久亚洲成人 | 久久国产综合 | 久久久久999 |