創(chuàng)業(yè)詞典網(wǎng) 創(chuàng)業(yè)知識(shí)學(xué)習(xí)分享
在前不久華為P30系列新品發(fā)布會(huì)上,華為消費(fèi)者事業(yè)群 CEO余承東提到過(guò)一項(xiàng)很厲害的技術(shù),但被他一嘴帶過(guò),這項(xiàng)技術(shù)就是方舟編譯器。
他提到,方舟編譯器可以提升Android系統(tǒng)內(nèi)應(yīng)用的編譯效率,過(guò)去Android應(yīng)用一邊編譯一邊執(zhí)行,而方舟編譯器將轉(zhuǎn)變?yōu)槿虣C(jī)器預(yù)編譯然后高效執(zhí)行。
華為宣布,使用方舟編譯器最終將提升24%的系統(tǒng)操作流暢度,提升44%的系統(tǒng)響應(yīng)能力,以及提升60%的三方應(yīng)用操作流暢度,“Android系統(tǒng)將比iOS系統(tǒng)還要流暢”。
這一技術(shù)將正式開(kāi)源給開(kāi)發(fā)者,讓所有人都可以使用方舟編譯器對(duì)應(yīng)用預(yù)編譯。
據(jù)華為消費(fèi)者事業(yè)群軟件部總裁王成錄向包括PingWest品玩在內(nèi)的媒體介紹,自發(fā)布會(huì)結(jié)束后,華為軟件內(nèi)部團(tuán)隊(duì)的電話幾乎被打爆,很多開(kāi)發(fā)者都想了解方舟編譯器更多的信息。
這個(gè)技術(shù)到底厲害在哪?它哪里厲害?在了解方舟編譯器的同時(shí),我們需要先了解一下Android的編譯流程。
編譯器的定義為:將“一種語(yǔ)言(通常為高級(jí)語(yǔ)言)”翻譯成能直接被計(jì)算機(jī)或虛擬機(jī)執(zhí)行的目標(biāo)代碼,編譯器的效率將直接影響程序運(yùn)營(yíng)性能/效率。
而Android系統(tǒng)內(nèi)部絕大多數(shù)應(yīng)用的邏輯部分都使用Java來(lái)編寫(xiě),但為了保證安全性、可靠性、兼容性等不同的需求,很多開(kāi)發(fā)者會(huì)使用不同的語(yǔ)言來(lái)編寫(xiě)其他的庫(kù),最終供Java調(diào)用。
也就是說(shuō)在Android系統(tǒng)內(nèi)部,不同模塊可能采用了不同的語(yǔ)言編寫(xiě),而為了達(dá)對(duì)各個(gè)模塊的互相理解,相互調(diào)用則會(huì)帶來(lái)系統(tǒng)資源上的內(nèi)耗。
編譯器充當(dāng)?shù)氖?ldquo;翻譯”功能。
將不同計(jì)算機(jī)的高級(jí)語(yǔ)言轉(zhuǎn)化為機(jī)器可以理解、可以執(zhí)行的機(jī)器語(yǔ)言,由不同的代碼替換為機(jī)器可讀懂的“0101”。
這體現(xiàn)在軟件開(kāi)發(fā)的部分。
而編寫(xiě)應(yīng)用的Java代碼能夠如何被Android系統(tǒng)理解,直接影響了程序的執(zhí)行效率。
編譯器的性能體現(xiàn)在是否可以將一種語(yǔ)言完美地解釋為可執(zhí)行的高級(jí)語(yǔ)言。
比如說(shuō),一個(gè)中英文翻譯,她既能理解中文成語(yǔ)的博大精深,也可以譜寫(xiě)出英文語(yǔ)境中優(yōu)美的句子。
乍一看,只要有一個(gè)非常好的“翻譯官/編譯器”就可以解決所有的問(wèn)題。
其實(shí)在編寫(xiě)Android系統(tǒng)的Java語(yǔ)言內(nèi)部,還引入了虛擬機(jī)的機(jī)制。
從Android系統(tǒng)誕生那天起,就選擇了使用Java作為基礎(chǔ)的編寫(xiě)語(yǔ)言。
據(jù)王成錄介紹,Java語(yǔ)言有非常多的優(yōu)勢(shì),比如說(shuō)它跨平臺(tái)、分布式,安全性做得都很好。
而Java語(yǔ)言設(shè)計(jì)當(dāng)初就有一個(gè)JDK,叫Java語(yǔ)言的開(kāi)發(fā)包,開(kāi)發(fā)包中就包含了一項(xiàng)重要的功能,稱之為虛擬機(jī)。
虛擬機(jī)主要針對(duì)硬件環(huán)境。
有了這個(gè)虛擬機(jī)以后,接下來(lái)無(wú)論是什么樣的硬件,Java語(yǔ)言不需要管了,它的功能是將其抽象成Java的運(yùn)行環(huán)境,因此Java實(shí)現(xiàn)了跨平臺(tái)——不管是X86機(jī)器,ARM機(jī)器,還是其他CPU的機(jī)器都沒(méi)有問(wèn)題。
但這也導(dǎo)致了新的問(wèn)題:無(wú)論任何一個(gè)機(jī)器,虛擬機(jī)資源必須分配好,所以占用了額外的系統(tǒng)資源。
也就是說(shuō),一個(gè)應(yīng)用先由Java編寫(xiě)成可執(zhí)行文件(Dex碼),再進(jìn)入系統(tǒng)由虛擬機(jī)虛擬環(huán)境解釋執(zhí)行為機(jī)器可讀的二進(jìn)制碼。
兩道工序的執(zhí)行效率也就是應(yīng)用在系統(tǒng)內(nèi)被執(zhí)行使用的執(zhí)行效率。
打開(kāi)使用一個(gè)軟件應(yīng)用,快不快,體驗(yàn)好不好,就在于這兩道工序效率如何。
實(shí)際上Android的演進(jìn)解釋了這套編譯邏輯上帶來(lái)的效率問(wèn)題。
王成錄提到,Android 1.0的時(shí)候,基本完全使用Dalvik虛擬機(jī),邏輯就是解釋一句執(zhí)行一句,效率非常慢。
Android 2.2的時(shí)候,當(dāng)系統(tǒng)發(fā)現(xiàn)應(yīng)用內(nèi)有有一段代碼頻繁執(zhí)行的時(shí)候,系統(tǒng)將直接編譯解釋,下次調(diào)用就不用重復(fù)解釋,直接執(zhí)行上次解釋出的機(jī)器指令,這叫JIT(即時(shí),Just In Time)編譯。
但是這個(gè)應(yīng)用一退出了以后, 這段機(jī)器指令也消失了。
Android 5.0的時(shí)候,一個(gè)非常大的變化是引入了ART虛擬機(jī)(Android Run Time),采用AOT編譯器(Ahead Of Time),就是運(yùn)行之前,將部分代碼編譯解釋好為二進(jìn)制語(yǔ)言,轉(zhuǎn)為靜態(tài)編譯,極大地提升了效率。
但對(duì)于那些Java動(dòng)態(tài)特性的部分,還有其他部分,仍然做不到直接編譯,還是要解釋執(zhí)行。
前面已經(jīng)提到,一個(gè)應(yīng)用由C語(yǔ)言編譯出來(lái)的庫(kù),加上Java語(yǔ)言本身的編譯以及虛擬機(jī)的編譯,當(dāng)一個(gè)應(yīng)用發(fā)生復(fù)雜的邏輯關(guān)系調(diào)用時(shí),解釋和編譯這些代碼需要通過(guò)接口去使用,因此產(chǎn)生很大的開(kāi)銷。
“一個(gè)數(shù)據(jù),如果沒(méi)有跨語(yǔ)言的協(xié)同,和有跨語(yǔ)言協(xié)調(diào)來(lái)比,效率差別很大。
”王成錄說(shuō)。
方舟編譯器是直接將應(yīng)用打包成二進(jìn)制碼輸送到系統(tǒng)內(nèi)執(zhí)行,將所有編譯轉(zhuǎn)為靜態(tài)編譯。
“有了方舟編譯器后如何實(shí)現(xiàn)的呢?相當(dāng)于,我不論你這個(gè)業(yè)務(wù)邏輯是Java寫(xiě)的還是庫(kù)是用C寫(xiě)的,都沒(méi)有問(wèn)題,用方舟編譯器做了統(tǒng)一的程序優(yōu)化以后直接編譯成機(jī)器指令。
用方舟編譯器做出來(lái)的APK,下載到手機(jī)上不需要再編譯了。
這就是巨大的差別。
”“最難啃的骨頭”王成錄介紹,華為方舟編譯器有四大技術(shù)亮點(diǎn)。
第一,首個(gè)多語(yǔ)言聯(lián)合優(yōu)化的編譯器,消除了跨語(yǔ)言調(diào)用開(kāi)銷;第二,程序運(yùn)行時(shí)無(wú)需依賴虛擬機(jī),減少了資源占用,同時(shí)實(shí)現(xiàn)了高效的內(nèi)存回收機(jī)制;第三,方舟編譯器可以針對(duì)不同應(yīng)用靈活編譯優(yōu)化;第四,對(duì)于開(kāi)發(fā)者學(xué)習(xí)和使用成本非常低。
方舟編譯器最大的突破是將所有編譯的部分,包括靜態(tài)動(dòng)態(tài)的部分全部變?yōu)殪o態(tài)編譯出的二進(jìn)制代碼。
眾所周知,Java語(yǔ)言系統(tǒng)非常龐大。
這就需要對(duì)Android現(xiàn)有的應(yīng)用,可能會(huì)用到哪些庫(kù),這些庫(kù)之間怎么用理解,需要大量的分析運(yùn)行狀態(tài),才能夠?qū)⑦@些動(dòng)態(tài)特性完成提前的編譯。
由于是機(jī)器語(yǔ)言,所以還涉及到了跨硬件平臺(tái)開(kāi)發(fā)。
這就需要對(duì)所有開(kāi)發(fā)環(huán)境、系統(tǒng)內(nèi)部解釋環(huán)境的編譯及語(yǔ)言、整體架構(gòu)和邏輯理解非常深入。
“就像一個(gè)優(yōu)秀的翻譯官一定對(duì)漢語(yǔ)言文學(xué)理解的非常到位,然后再對(duì)英語(yǔ)理解非常到位。
”王成錄說(shuō),一個(gè)翻譯器做得好不好,重要的衡量標(biāo)準(zhǔn)是能不能給程序帶來(lái)性能提升。
“編譯器和翻譯人類語(yǔ)言是一樣的,翻譯出來(lái)不太難,但是要翻譯的又快又好就太難了。
”邏輯通順以后,還需要大量的優(yōu)化和調(diào)整。
一方面對(duì)Java語(yǔ)言的了解再深入再細(xì)致再重建;另外一方面,對(duì)機(jī)器指令順序結(jié)構(gòu)理解要非常清楚才行,這兩個(gè)匹配的方法越準(zhǔn)確,編譯器效率越高。
“一個(gè)好的編譯器,開(kāi)發(fā)者一行代碼都不需要修改,性能能提升10%到20%。
”據(jù)PingWest品玩了解,方舟編譯器是個(gè)通用技術(shù),基于目前ARM指令集開(kāi)發(fā)、適用于所有ARM芯片平臺(tái)。
也就是說(shuō),經(jīng)過(guò)方舟編譯器編譯的應(yīng)用,再經(jīng)過(guò)其他品牌廠商的適配,就可以適用于包括小米、OPPO、vivo等其他品牌手機(jī)上的Android系統(tǒng)。
如果沒(méi)有適配,則還是按照普通app效率執(zhí)行。
據(jù)王成錄介紹,華為在2009年開(kāi)始準(zhǔn)備編譯器研發(fā)方面的工作,從華為海思研發(fā)起步時(shí),2013年華為HCC自研編譯器有了雛形,它吸引了第一批海內(nèi)外研究人員加入,創(chuàng)建了編譯組。
隨后,華為“2012年實(shí)驗(yàn)室”成立,2016年正式設(shè)立了編譯器與編程語(yǔ)言實(shí)驗(yàn)室。
直到今天,華為才算正式推出了方舟編譯器。
王成錄說(shuō),編譯器真的是一個(gè)“板凳要坐十年冷”的工程,“我們穩(wěn)得住才能做下來(lái),非常的復(fù)雜。
”據(jù)PingWest品玩了解,方舟編譯器開(kāi)發(fā)人員有一半來(lái)自于消費(fèi)者BG,一半來(lái)自于“2012實(shí)驗(yàn)室”,投入研發(fā)人員幾百人。
方舟編譯器是華為發(fā)布的最新的“黑科技”,但華為不是無(wú)意為之。
王成錄介紹說(shuō),華為一直在圍繞性能這條線找最主要的矛盾。
比如隨著應(yīng)用的豐富,手游越來(lái)越流行,華為針對(duì)游戲做了GPU Turbo。
把游戲問(wèn)題解決后,發(fā)現(xiàn)還有很多應(yīng)用需要改進(jìn)網(wǎng)絡(luò)實(shí)時(shí)連接,所以華為發(fā)布了Link Turbo,“這個(gè)發(fā)揮了華為的優(yōu)勢(shì),我們對(duì)網(wǎng)絡(luò)非常熟悉,我們做了聚合把端和網(wǎng)絡(luò)的連接。
”王成錄說(shuō),方舟編譯器是最后的、最難啃的骨頭,但華為把它攻克了。
給Android系統(tǒng)動(dòng)手術(shù)華為方舟編譯器,只是華為改造Android性能的一部分。
簡(jiǎn)而言之,華為在系統(tǒng)軟件上針對(duì)用戶使用中的痛點(diǎn)問(wèn)題進(jìn)行有針對(duì)性的優(yōu)化。
比如EMUI 5.0主要解決Android系統(tǒng)卡頓問(wèn)題,EMUI 8.2上線了GPU Turbo主攻游戲性能受限問(wèn)題,EMUI9.0上線了Link Turbo主攻網(wǎng)絡(luò)覆蓋不均問(wèn)題,EMUI 9.1則上線了方舟編譯器和超級(jí)文件系統(tǒng)EROFS,針對(duì)Android流暢度不足問(wèn)題。
鋪開(kāi)Android系統(tǒng)全棧圖,華為針對(duì)每一項(xiàng)Android系統(tǒng)內(nèi)部模塊進(jìn)行改造優(yōu)化。
華為將Android系統(tǒng)分為生態(tài)外部、框架層、中間件、硬件抽象和內(nèi)核等多個(gè)層面進(jìn)行全鏈條優(yōu)化。
王成錄介紹,EMUI 5.0圍繞核心組件內(nèi)的進(jìn)程管理和文件系統(tǒng)進(jìn)行優(yōu)化。
“我們最終把F2FS(專門(mén)為Flash閃存定做的操作系統(tǒng))這個(gè)系統(tǒng)放在5.0上了,發(fā)現(xiàn)上手機(jī)的碎片整理能力比原來(lái)EXT系列的文件系統(tǒng)要高了很多。
”而EMUI 8.0的Link Turbo圍繞框架層的通信、中間件的連接以及芯片驅(qū)動(dòng)的網(wǎng)絡(luò)管理做優(yōu)化。
“這是在整個(gè)圖形中間件、在內(nèi)存管理,和在進(jìn)程上做完整的優(yōu)化技術(shù)。
”除去方舟編譯器,EMUI 9.0上線的另一重大技術(shù)是超級(jí)文件系統(tǒng)EROFS,這個(gè)文件系統(tǒng)是解決系統(tǒng)分區(qū)文件存儲(chǔ)和管理的問(wèn)題,圍繞Android系統(tǒng)內(nèi)核安全管理和內(nèi)存管理進(jìn)行改造。
王成錄提到,所有系統(tǒng)初始化的文件存在系統(tǒng)分區(qū),以前系統(tǒng)分區(qū)只有初始化啟動(dòng)寫(xiě)入一次后,除系統(tǒng)升級(jí)以外,永遠(yuǎn)不允許再次寫(xiě)入。
原始的系統(tǒng)分區(qū)給只讀只寫(xiě)加了兩道鎖。
如果寫(xiě)了以后,就意味著系統(tǒng)已經(jīng)被攻破。
但文件系統(tǒng)對(duì)磁盤(pán)讀寫(xiě)效率有著重要影響,據(jù)華為介紹,超級(jí)文件系統(tǒng)EROFS采用了可讀設(shè)計(jì),使用了壓縮算法,Android系統(tǒng)隨機(jī)讀性能平均提升20%,升級(jí)包大小下降約5%-10%,升級(jí)時(shí)間縮短了約20%。
“這個(gè)文件系統(tǒng)是只讀的,既解決安全性問(wèn)題,又解決性能效率問(wèn)題。
這個(gè)系統(tǒng)是華為百分之百原創(chuàng)的,我們這個(gè)團(tuán)隊(duì)能夠把這件事情做出來(lái),在中國(guó)也是第一次。
”走入無(wú)人區(qū)據(jù)PingWest品玩了解,華為此前在5萬(wàn)臺(tái)華為手機(jī)上秘密試驗(yàn)F2FS文件系統(tǒng)性能的影響,為此王成錄還和余承東簽了“軍令狀”——因?yàn)闇y(cè)試修改手機(jī)文件系統(tǒng)對(duì)于手機(jī)安全有極大的隱患,一旦發(fā)生意外,將對(duì)手機(jī)品牌造成很?chē)?yán)重的影響。
而一旦成功,將驅(qū)動(dòng)Android系統(tǒng)帶來(lái)文件可讀取本質(zhì)和讀寫(xiě)性能方面的變革。
一個(gè)問(wèn)題是,華為給Android動(dòng)了這么多的手術(shù),這件事情Google怎么看?Google是華為的戰(zhàn)略合作伙伴,華為和Google一直保持著積極持續(xù)的溝通。
王成錄說(shuō),“我們?cè)诎沧康讓拥膬?yōu)化工作,很多其實(shí)都體現(xiàn)在了Android的大版本里,作為了產(chǎn)業(yè)的共同資產(chǎn)。
比如‘天生快,一生快’里的很多系統(tǒng)機(jī)制。
F2FS文件系統(tǒng)也為多個(gè)廠家使用。
”根據(jù)王成錄的說(shuō)法,Google很快就注意到了華為在測(cè)試F2FS文件系統(tǒng),Google的態(tài)度是“在中國(guó)用沒(méi)有問(wèn)題。
”這次進(jìn)一步推出方舟編譯器和超級(jí)文件系統(tǒng)EROFS,我們推測(cè)華為的目標(biāo)是,推動(dòng)這些改變進(jìn)入Google的開(kāi)源社區(qū),借此進(jìn)駐到系統(tǒng)內(nèi)部。
華為過(guò)去幾波改造都是推動(dòng)終端側(cè)的改革。
華為提到,這就像是改造人的身體機(jī)能。
同時(shí),華為還想保證市場(chǎng)上的水和糧食的供應(yīng)是好的——通過(guò)華為HiAI和HiLink,推動(dòng)外部生態(tài)的繁榮和開(kāi)放。
方舟編譯器未來(lái)使命就在這里。
“這是華為非常完整的邏輯,我相信我們后續(xù)仍然會(huì)圍繞全棧,因?yàn)橄聦拥男酒€要不斷的演進(jìn),上面的應(yīng)用也在不斷發(fā)展變化,整個(gè)系統(tǒng)優(yōu)化調(diào)整還會(huì)持續(xù)。
”有了方舟編譯器編譯以后,就不需要用Java的虛擬機(jī)了,它改變了過(guò)去Android系統(tǒng)內(nèi)部的代碼解釋機(jī)制。
王成錄說(shuō),“海思做了芯片以后,需要有自己的編譯器才能真正發(fā)揮芯片的能力。
”他還提到,方舟編譯器也可以適用于ICT行業(yè)其他系統(tǒng),未來(lái)可基于具體芯片指令集進(jìn)行開(kāi)發(fā)。
提到軟件研發(fā),王成錄流露出了個(gè)人情懷,“我覺(jué)得中國(guó)這么大量的軟件研發(fā)人員,但國(guó)內(nèi)一直缺乏領(lǐng)先的系統(tǒng)軟件。
系統(tǒng)軟件指的是什么?基本上是操作系統(tǒng),數(shù)據(jù)庫(kù)、編譯器。
但實(shí)際上還有一個(gè),就是編程框架和編程語(yǔ)言。
實(shí)際上華為走到編譯器領(lǐng)域,是非常重要的部分,這個(gè)編譯器再發(fā)展,就可能變成編程框架和編程語(yǔ)言。
”編譯器似乎是一個(gè)開(kāi)始。
在軟件行業(yè),華為正在走入無(wú)人區(qū)。
下一篇:阿里香港二次上市 回歸真的"只是時(shí)間問(wèn)題"? 下一篇 【方向鍵 ( → )下一篇】
上一篇:小米5G新品發(fā)布會(huì) 小米國(guó)內(nèi)首款5G手機(jī)發(fā)布 上一篇 【方向鍵 ( ← )上一篇】
快搜