精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

單線程開發(fā)異步任務?ACE JS框架是如何實現(xiàn)的

開發(fā) 開發(fā)工具
HarmonyOS ACE開發(fā)框架遵循EventLoop調度機制,并且提供了更多的機制和API,讓業(yè)務邏輯可以在外部線程執(zhí)行,通過消息通信機制讓JS語言有了異步的屬性。

做應用開發(fā)時,開發(fā)語言的選擇至關重要。例如Java語言的線程特性能夠讓多任務并行,從而充分利用硬件資源開發(fā)出高性能的應用。而HarmonyOS 2提供的應用開發(fā)語言中,不僅有多線程的Java語言,還有單線程的JS語言。

那JS語言該如何充分利用硬件資源開發(fā)出高性能的應用呢?為此,HarmonyOS提出了“ACE JS的單線程異步機制”來解決這一問題。

雖然,JS語言本身是無法實現(xiàn)異步功能,但是ACE JS框架提供了多線程的宿主環(huán)境,通過消息通信機制讓JS語言有了異步的屬性,接下來我們來了解下具體的實現(xiàn)原理。

ACE開發(fā)框架

使用JS開發(fā)HarmonyOS應用,使用的開發(fā)框架名為ACE(Ability Cross-Platform Environment),該框架適用于手機、平板、智慧屏、智慧表、車機等設備,具備“一次開發(fā),多端部署”的能力。

ACE框架包括應用層(Application)、前端框架層(Framework)、引擎層(Engine)和平臺適配層(Porting Layer),如下圖所示:

  • Application:應用層表示開發(fā)者使用JS UI框架開發(fā)的FA應用,這里的FA應用特指JS FA應用;
  • Framework:前端框架層主要完成前端頁面解析,以及提供MVVM(Model-View-ViewModel)開發(fā)模式、頁面路由機制和自定義組件等能力;
  • Engine:引擎層主要提供動畫解析、DOM(Document Object Model)樹構建、布局計算、渲染命令構建與繪制、事件管理等能力;
  • Porting Layer:適配層主要完成對平臺層進行抽象,提供抽象接口,可以對接到系統(tǒng)平臺。比如:事件對接、渲染管線對接和系統(tǒng)生命周期對接等。

ACE開發(fā)框架的線程模型

每個HarmonyOS JS應用,都是通過上圖所示的ACE開發(fā)框架進行加載渲染的。ACE開發(fā)框架包含了JS線程、UI線程、GPU線程、IO線程,并且在ACE框架外還會存在一類后臺任務線程。其中GPU線程與IO線程為ACE框架內部的專有線程,主要作用于ACE框架初始化與頁面加載渲染的過程;UI線程、JS線程和后臺任務線程會與應用開發(fā)代碼相關:

  • UI線程:負責應用界面的繪制刷新,與應用的進程號相同,又叫主線程。如果開發(fā)JS+JAVA的混合編程,JAVA PA(Particle Ability)的onStart/onConnect等Ability生命周期回調便是運行在主線程,若在這些生命周期回調上執(zhí)行耗時操作則會導致JS UI的繪制刷新卡住。
  • JS線程:應用的JS代碼會被JS引擎解析執(zhí)行,并運行在JS線程上,而JS又是單線程語言,所以目前我們工程中看到的所有的JS代碼都會執(zhí)行在這個進程下唯一的JS線程上。
  • 后臺任務線程:這里是對ACE框架外部的后臺線程的一個統(tǒng)稱,并不單指一個線程,也并不唯一。后臺任務線程包含了Java PA線程、文件操作API、網絡訪問API內部實現(xiàn)等相關線程。

下面我們結合測試代碼,分析這三個線程的作用和關系。

JS線程與UI線程的關系

為了驗證JS線程與UI線程的關系,我們準備了一個實驗性質的Demo,主要代碼以及運行過程的Log如下:

首先我們在IDE建立一個Empty Ablity(JS)模板的HelloWorld工程,在生命周期、按鈕響應回調方法里增加Log以觀察線程情況。剛創(chuàng)建的app.js中Application生命周期默認已經有Log,無需額外添加。

我們只需要在主界面index.js文件中onInit增加日志:

  1. console.info('page.default onInit'); 


然后在index.hml中增加一個button以及會一直進行動畫的progress組件:

  1. <button id='button1' onclick="onButtonClick">I'm a button</button> 
  2. <progress type="circular"/> 


最后在index.js中增加按鈕點擊響應事件以及Log,并且嘗試sleep阻塞js線程:

  1. function sleep(delay) { 
  2. for (var t = Date.now(); Date.now() - t <= delay; ); 
  3. onButtonClick() { 
  4. console.info('onButtonClick begin'); 
  5. sleep(1000); 
  6. console.info('onButtonClick end'); 


將應用運行起來,點擊兩次按鈕,得到如下Log:

從輸出的Log中,我們可以看到這個JS FA進程號為22592,也就是說UI線程是22592;生命周期回調以及按鈕響應均在24077線程,這個就是JS線程,所以JS線程與UI線程不是同一個線程。

并且我們嘗試通過sleep方法阻塞JS線程,想觀察JS線程阻塞是否會影響到UI線程的刷新。最終得出的結論是無論JS線程sleep多長時間,UI界面上的progress組件動畫一直會不斷刷新,按鈕也會有按壓效果變化,所以我們可以推測JS線程與UI線程的相互調用應該是通過某種消息機制完成的,而不是阻塞式的調用。

JS線程與后臺任務線程的關系

ACE JS框架提供了JS FA(Feature Ability)調用Java PA(Particle Ability)的機制,該機制提供了一種通道來傳遞方法調用、處理數(shù)據(jù)返回以及訂閱事件上報。通過以下Demo可以驗證 JS 線程與Java PA線程的關系:

在JS中,我們通過FeatureAbility.callAbility拉起并調用了名為一個類名為ServiceAbility的Java PA,并拿到返回結果:

  1. var action = {}; 
  2. action.bundleName = 'com.blancwu.test'
  3. action.abilityName = 'com.blancwu.test.ServiceAbility'
  4. action.messageCode = 1001
  5. action.abilityType = 0
  6. action.syncOption = 0
  7.  
  8. console.info('FeatureAbility.callAbility begin' + JSON.stringify(action));FeatureAbility.callAbility(action).then(function (value) { 
  9. console.info('FeatureAbility.callAbility async result ' + JSON.stringify(value)); 
  10. }) 
  11. console.info('FeatureAbility.callAbility end' + JSON.stringify(action)); 

在ServiceAbility的onRemoteRequest中增加Log輸出,并sleep 1秒鐘,以便觀察線程情況與之間關系:

  1. @Override 
  2. public boolean onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option) throws RemoteException { 
  3. HiLog.info(LABEL_LOG, "onRemoteRequest begin " + code); 
  4. if (code == 1001) { 
  5. try { 
  6. Thread.sleep(1000); 
  7. } catch (InterruptedException e) { 
  8. e.printStackTrace(); 
  9. Map<String, Object> result = new HashMap<String, Object>(); 
  10. result.put("result", 1); 
  11. reply.writeString(ZSONObject.toZSONString(result)); 
  12. HiLog.info(LABEL_LOG, "onRemoteRequest end " + code); 
  13. return super.onRemoteRequest(code, data, reply, option); 


完成以上代碼后,并進行執(zhí)行,可得到的Log如下:

我們觀察到本次運行主進程(UI線程)號為4133,JS代碼執(zhí)行在JS線程5887,Java PA響應onRemoteRequest執(zhí)行在另一個后臺任務線程5837。通過Log我們看到onRemoteRequst即使阻塞了后臺任務線程1s也不會影響JS線程的并行執(zhí)行以及主線程(UI線程)上動畫的刷新,做到了JS線程與后臺任務線程異步地執(zhí)行事務。

JS線程的異步機制

上面從代碼實驗角度觀察到了JS線程與其他線程的異步關系,那么JS線程處理來自其他多個線程的調用是怎么實現(xiàn)的呢?
首先,我們來看一下傳統(tǒng)瀏覽器環(huán)境下的運行機制:

上圖中,JS線程中的函數(shù)調用會存在于棧(stack)中,棧中的函數(shù)可以調用瀏覽器環(huán)境提供的WebAPIs,包含了DOM、ajax、timeout等API,這些API會在瀏覽器環(huán)境提供的另外一個外部線程執(zhí)行,執(zhí)行完成后會在任務隊列(callback queue)中加入對應的回調事件(如onClick、onLoad、onDone)。

當棧中的代碼執(zhí)行完畢,即棧清空后,JS線程又會通過event loop取出任務隊列中的下一個任務進行執(zhí)行,以此類推完成整個程序執(zhí)行。

HarmonyOS ACE開發(fā)框架同樣遵循上述最基本的EventLoop調度機制,并且提供了更多的機制和API,讓業(yè)務邏輯可以在外部線程執(zhí)行,包含了上面提到的Java PA以及異步回調的系統(tǒng)能力API。其中,異步回調的系統(tǒng)能力API包含如文件系統(tǒng)操作和網絡操作等,具體大家可以按照我們實驗Demo的方法去嘗試一下。
● 參考 https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-file-storage-0000000000629445

未來發(fā)展的展望

目前ACE JS應用內實現(xiàn)多線程的最佳方式是通過混合編程調用Java PA方式,未來,隨著純JS應用越來越多,只支持單線程的JS ACE框架的異步API并不能解決各種復雜場景問題。

單線程的JS加上異步API能夠很好解決單個I/O阻塞的問題,但是如果遇到大量的I/O事件,比如批刪除大量文件,通過for循環(huán)發(fā)起了大量異步任務,也會降低執(zhí)行效率,甚至阻塞其他異步任務的執(zhí)行。并且如果要使用JS語言開發(fā)計算密集型的任務,也無法在唯一的JS線程上進行。

這時就需要一個真正的JS多線程處理機制了,雖然目前HarmonyOS 2還未支持,但未來HarmonyOS會考慮規(guī)劃出與HTML5類似提供支持WebWorker機制,支持開發(fā)出多線程的JS代碼,提供給應用開發(fā)者更多的發(fā)揮空間。

 

責任編輯:黃顯東 來源: 51CTO
相關推薦

2025-04-24 08:15:00

Redis單線程線程

2025-06-17 00:22:00

2009-07-10 09:05:20

SwingWorker

2021-01-10 11:21:33

JavaScript語言開發(fā)

2019-06-17 14:20:51

Redis數(shù)據(jù)庫Java

2021-06-11 11:28:22

多線程fork單線程

2022-06-22 08:16:29

異步非阻塞框架

2020-11-09 09:33:37

多線程

2010-08-30 08:55:56

JavaScript引

2022-01-04 11:11:32

Redis單線程Reactor

2021-08-10 07:00:01

Redis單線程并發(fā)

2022-07-07 09:12:17

JavaScript線程循環(huán)機制

2019-05-06 11:12:18

Redis高并發(fā)單線程

2022-07-18 13:59:43

Redis單線程進程

2020-10-26 08:55:52

Redis單線程模型

2010-01-28 16:45:44

Android單線程模

2024-02-26 00:00:00

JavaScript單線程高效

2017-03-06 14:08:38

JavaScript單線程setTimeout

2023-10-15 12:23:10

單線程Redis

2019-11-25 10:13:52

Redis單線程I
點贊
收藏

51CTO技術棧公眾號

国产一区二区三区视频在线播放 | 欧美精品性视频| 亚洲黄色av片| 老色鬼在线视频| 国产精品色呦呦| 国产伦精品一区二区三区| 天天操天天干天天摸| 欧美片第1页综合| 亚洲色图国产精品| 2018国产精品| 黑人一区二区三区| 精品二区三区线观看| 伊人av成人| 天堂av在线资源| 国产一区二区影院| 日韩av色综合| 国产一级二级三级视频| 欧美一级淫片| 亚洲第一区在线观看| 久久人人爽av| 色成人免费网站| 亚洲高清久久久| 男女h黄动漫啪啪无遮挡软件| 男人天堂亚洲二区| 播五月开心婷婷综合| 91精品啪在线观看麻豆免费| 久久精品视频5| 国产日韩欧美一区在线| 欧美日韩成人精品| 97在线观看免费高| 欧美日韩有码| 亚洲日本欧美日韩高观看| 91亚洲一线产区二线产区| 婷婷激情成人| 欧美在线观看视频在线| 免费在线观看毛片网站| 男人的天堂免费在线视频| 亚洲综合一二区| 麻豆视频传媒入口| 激情成人四房播| 国产丝袜欧美中文另类| 久久亚裔精品欧美| 色鬼7777久久| 99热99精品| 国语精品中文字幕| 成人免费观看在线视频| 国产伦精品一区二区三区视频青涩| 国产精品亚洲欧美导航| 无码人妻丰满熟妇精品区| 亚洲在线网站| 欧美亚洲另类激情另类| 亚洲精品男人的天堂| 一区二区91| 4388成人网| 日本中文在线播放| 免费日韩av| 日本亚洲欧洲色α| 亚洲精品毛片一区二区三区| 日韩福利视频网| 国产精品观看在线亚洲人成网| 蜜臀精品一区二区三区| 日韩高清国产一区在线| 国产玖玖精品视频| 91免费视频播放| 国产在线乱码一区二区三区| 91中文字幕一区| 亚洲国产日韩在线观看| 99视频一区二区| 欧美第一黄网| 天堂中文8资源在线8| 亚洲婷婷国产精品电影人久久| 日本特级黄色大片| 色yeye免费人成网站在线观看| 亚洲精品中文字幕乱码三区| 和岳每晚弄的高潮嗷嗷叫视频| 九色porny自拍视频在线观看| 欧美日韩一区二区三区| 激情综合网俺也去| 亚洲精品tv| 亚洲第一视频网站| 亚洲精品国产熟女久久久| 久久在线免费| 九色成人免费视频| 男人天堂av在线播放| 久久精品国产精品亚洲综合| 亚洲影院高清在线| 污视频网站在线播放| 国产丝袜在线精品| 乱熟女高潮一区二区在线| 欧美激情网站| 欧美日韩免费视频| 黄色在线免费播放| 成人免费av| 欧美激情视频在线免费观看 欧美视频免费一| 国产无码精品视频| 日本成人超碰在线观看| 99久久一区三区四区免费| 午夜福利一区二区三区| 国产精品久久久久一区| 国内精品在线观看视频| 久久精品黄色| 亚洲国产免费av| 貂蝉被到爽流白浆在线观看| 怡红院精品视频在线观看极品| 国产999精品久久久影片官网| 99精品免费观看| 久久亚洲一级片| 免费的一级黄色片| а√天堂资源国产精品| 亚洲高清免费观看高清完整版| 国产精品酒店视频| 亚洲中字在线| 国产91亚洲精品一区二区三区| 成人在线免费公开观看视频| 亚洲一区电影777| 亚洲一级片网站| 希岛爱理av免费一区二区| 久久亚洲成人精品| 少妇一级淫片日本| 91丨国产丨九色丨pron| 韩国无码av片在线观看网站| 91成人福利社区| 国产亚洲精品久久| 国产精品乱子伦| 国产91在线观看丝袜| 综合视频免费看| 澳门av一区二区三区| 日韩精品在线电影| 精品久久免费视频| 成人永久aaa| 国产免费xxx| 精品视频在线观看免费观看| 最近日韩中文字幕中文| 中文字幕一区二区久久人妻| 2023国产一二三区日本精品2022| 91免费黄视频| 国产精品一线| 国内伊人久久久久久网站视频| 国产富婆一级全黄大片| 亚洲欧美另类在线| 天天操精品视频| 天天射成人网| 成人日韩av在线| www免费在线观看| 7777精品久久久大香线蕉 | 有码一区二区三区| jizz18女人| 99精品在线| 成人国产精品一区| 91国内在线| 51精品久久久久久久蜜臀| 欧美三级xxx| 九九视频这里只有精品| 91国内精品视频| 国产精品区一区二区三区 | 久久精品九九| 欧美成ee人免费视频| 神马久久午夜| 亚洲性日韩精品一区二区| 久久久精品久久久久| 男人网站在线观看| 亚洲第一黄网| 精品一区日韩成人| 在线观看特色大片免费视频| 日韩高清免费在线| 午夜影院免费在线观看| 国产婷婷一区二区| 国内外成人免费在线视频| 日韩精品一区二区三区免费观影| 国产免费一区视频观看免费| 国产黄色在线免费观看| 1区2区在线观看| 2023国产精华国产精品| 一区二区日韩精品| 91福利免费视频| 一区二区三区日韩在线观看| 丝袜熟女一区二区三区| 久久av一区二区三区| 亚洲高清不卡一区| 久久久久亚洲精品中文字幕| 99国产欧美另类久久久精品 | 一级黄色大片免费| 亚洲日本一区二区| 亚洲精品鲁一鲁一区二区三区| 国产一区二区高清| 伊人天天久久大香线蕉av色| 国产无遮挡裸体免费久久| 国产suv精品一区二区三区88区| 亚洲s色大片| 西野翔中文久久精品国产| 青青草97国产精品免费观看无弹窗版| 国产精品免费在线播放| 亚洲三级欧美| www.欧美精品| 无遮挡又爽又刺激的视频| 国产成人av免费观看| 凹凸成人在线| 日韩免费不卡av| 日本成人不卡| 欧美午夜视频一区二区| 亚洲午夜精品一区二区三区| 精品国产第一国产综合精品| 欧美在线视频一二三| 国产激情在线| 亚洲性夜色噜噜噜7777| 国产黄色大片网站| 日本成人在线播放| 国产在线国偷精品免费看| 精品人妻人人做人人爽| 欧美亚洲高清| 免费观看成人高| 2020最新国产精品| 91精品视频在线看| 成人美女视频| 欧美精品激情视频| 国产网站在线免费观看 | 免费成人进口网站| 日韩精品免费一区二区三区竹菊| 91免费视频网站| 日韩欧美一区二区三区在线观看 | 一区二区三视频| 国产欧美日韩免费观看| 精品国产乱码久久久久| 综合视频一区| 色综合天天视频在线观看 | 欧美日韩最好看的视频| 一本色道69色精品综合久久| 成人亚洲欧美一区二区三区| 天堂av在线免费观看| 99久久久精品| 中文字幕第六页| 久久精品72免费观看| 久久九九国产视频| 亚洲一区二区网站| 免费国产黄色网址| 亚洲看片一区| 黄色一级片在线看| 亚洲高清资源| 人人妻人人澡人人爽欧美一区| 婷婷亚洲综合| 日本黄色播放器| 成人综合专区| 亚洲一区三区在线观看| 色综合久久网| 亚洲视频电影| 久久高清免费| 超碰在线免费观看97| 97精品国产福利一区二区三区| 亚洲丰满在线| 91精品高清| 欧美美女黄色网| 午夜日本精品| 日韩国产一级片| 99视频精品免费观看| 99999精品视频| 日韩精品午夜视频| 日本高清久久久| 国产在线精品一区二区三区不卡| 黄色片免费网址| 国产ts人妖一区二区| 午夜不卡久久精品无码免费| 91亚洲精品一区二区乱码| www.久久国产| 国产精品色眯眯| 久久中文免费视频| 亚洲国产va精品久久久不卡综合 | 欧美激情aⅴ一区二区三区| 亚洲欧美日韩国产中文专区| 老头老太做爰xxx视频| 国产欧美日韩精品a在线观看| 日本免费www| 亚洲欧美偷拍另类a∨色屁股| 波多野结衣爱爱视频| 黄色成人在线免费| 国产精品午夜一区二区| 欧美一区二区女人| 天堂av在线免费| 在线日韩精品视频| 日韩欧美一起| 青青草成人在线| 999精品视频在线观看| 国产呦系列欧美呦日韩呦| 国产成人黄色| 狠狠干视频网站| 久久九九电影| 黄色a级三级三级三级| 96av麻豆蜜桃一区二区| 国产一区第一页| 午夜日韩在线电影| 在线观看免费视频一区| 欧美精品一区二区三区四区| 极品美乳网红视频免费在线观看 | 免费在线观看a级片| 精品久久久久久中文字幕一区奶水 | 香蕉av在线播放| 日韩中文视频免费在线观看| av在线视屏| 成人黄色在线免费| 亚洲欧洲色图| 国产 欧美 日韩 一区| 日韩电影免费在线| 一区二区免费在线观看视频 | 国产在线观看成人| 精品视频免费看| 天天色综合av| 欧美巨猛xxxx猛交黑人97人| 成人黄色免费短视频| 国产成人av一区二区三区| 久久中文视频| 91蝌蚪视频在线观看| 成人h精品动漫一区二区三区| 欧美日韩国产一二三区| 黑人巨大精品欧美一区二区免费| va视频在线观看| 日韩亚洲欧美中文在线| 唐人社导航福利精品| 国产日韩在线一区二区三区| 亚洲视频在线免费| 亚洲xxxx2d动漫1| 久久蜜臀中文字幕| 日干夜干天天干| 日韩免费电影网站| 黄在线免费观看| 国产精品亚洲网站| 不卡一区2区| 成人在线免费播放视频| 99久久精品免费精品国产| 精品视频在线观看免费| 欧美一区二区大片| 麻豆影视在线观看_| 国产精品视频精品视频| 国产在线日韩精品| 日韩人妻精品无码一区二区三区| www.视频一区| 免费日韩一级片| 亚洲国产精品va在线| 黄色污污视频在线观看| 99视频免费观看蜜桃视频| 欧美.www| 中文字幕制服丝袜| 亚洲综合色成人| 亚洲国产精彩视频| 国内免费久久久久久久久久久 | 亚洲激情视频在线| 51漫画成人app入口| 激情久久av| 鲁大师成人一区二区三区| 粉嫩av懂色av蜜臀av分享| 欧美日韩中国免费专区在线看| 色网站在线免费观看| 日本一区二区在线免费播放| 免费看av成人| 无人在线观看的免费高清视频| 中文字幕第一区综合| 一卡二卡在线视频| 毛片精品免费在线观看| 77成人影视| 欧美,日韩,国产在线| 久久五月婷婷丁香社区| 欧美高清69hd| 久久精品免费播放| 99re8这里有精品热视频免费| 免费高清一区二区三区| 99re热视频精品| 久久精品五月天| 久久久国产精品亚洲一区| 一区二区三区亚洲变态调教大结局 | 99综合视频| 舐め犯し波多野结衣在线观看| 欧美日韩国产天堂| 青青在线视频| 免费看成人午夜电影| 久久国产精品一区二区| 欧产日产国产v| 日韩精品免费在线播放| 日本美女久久| 精品人妻人人做人人爽| 26uuu精品一区二区| 亚洲一区二区三区高清视频| 欧美大片在线看免费观看| 天天躁日日躁成人字幕aⅴ| 蜜臀一区二区三区精品免费视频| 亚洲伊人色欲综合网| 嫩草精品影院| 91传媒视频在线观看| 先锋影音国产一区| 来吧亚洲综合网| 日韩高清av在线| 精品国产亚洲一区二区在线观看 | 男女羞羞免费视频| 亚洲精选在线观看| 美女国产精品久久久| 黑鬼大战白妞高潮喷白浆| 亚洲摸摸操操av| 欧美少妇另类| 99久久国产免费免费| 日韩电影一二三区| 天堂网一区二区三区| 久久久91精品国产一区不卡| 亚洲小说图片视频|