漫话:如何给女朋友解释鸿蒙OS是怎样实现跨平台的?

戳蓝字“CSDN云计算”关注我们哦!

640?wx_fmt=jpeg

周末在家休息,女朋友在刷朋友圈,突然她问我:

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

鸿蒙OS回顾

2019年8月9日华为开发者大会上,华为消费者业务CEO余承东正式宣布发布自有操作系统鸿蒙,内核为Linux内核、鸿蒙微内核和LiteOS。未来将摆脱Linux内核和LiteOS,只有鸿蒙微内核。

鸿蒙(英语:Harmony OS,开发代号Ark)是华为自2012年开发的一款可能兼容Android app的跨平台操作系统。

640?wx_fmt=jpeg

图:鸿蒙OS的四大技术特性

1.分布式架构首次用于终端OS,实现跨终端无缝协同体验 

2. 确定时延引擎和高性能IPC技术实现系统天生流畅 

3. 基于微内核架构重塑终端设备可信安全 

4. 通过统一IDE支撑一次开发,多端部署,实现跨终端生态共享

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

什么是跨平台

在以前,平台 ≈ 操作系统。所以,传统意义上的跨平台即不依赖于操作系统,也不依赖硬件环境。一个操作系统下开发的应用,放到另一个操作系统下依然可以运行。

但是随着科技的发展,平台 ≈ 操作系统已经不成立了,就像华为推出的鸿蒙OS,他可以支持到多种多样的设备,如手机、手表、电脑、汽车、智能家居设备等。

640?wx_fmt=jpeg

所以,今天我们谈的跨平台,指的是跨设备。即平台 ≈ 设备

640?wx_fmt=jpeg

所以,华为希望鸿蒙OS可以运行在各种各样的设备上,所以,鸿蒙OS必然需要具备跨平台的能力。

而且,鸿蒙想要做的不仅仅是操作系统可以跨平台,更重要的是要让用户和开发者真正的感受到跨平台。

所以,跨平台操作系统鸿蒙的目的是:使开发者能够聚焦自身业务逻辑,像开发同一终端一样开发跨终端分布式应用,也使最终消费者享受到强大的跨终端业务协同能力为各使用场景带来的无缝体验。

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

Java实现跨平台

先来说说Java是如何实现跨平台的。

Java对于跨平台的支持,就像对安全性和网络移动性的支持一样,是分布在整个Java体系结构中的。其中扮演者重要的角色的有Java语言规范、Class文件、Java虚拟机(JVM)等。

首先,在Java语言规范中,规定了Java语言中基本数据类型的取值范围和行为。其次,所有Java文件要编译成统一的Class文件。最后,通过Java虚拟机将Class文件转成对应平台的二进制文件。

Java的平台无关性是建立在Java虚拟机的平台有关性基础之上的,是因为Java虚拟机屏蔽了底层操作系统和硬件的差异。

想要运行一段Java代码,要经过多个步骤,将Java源代码转换成机器可以执行的机器代码,这个过程主要由虚拟机来完成。

在著名的HotSpot虚拟机中,主要有解释执行和即时编译两种形式:

  • 解释执行

    • 逐条将字节码翻译成机器码并执行

  • 即时编译(Just-in-time ,JIT)

    • 将一个方法中包含的所有字节码编译成机器码后再执行。

HotSpot 默认采用混合模式,综合了解释执行和即时编译两者的优点。它会先解释执行字节码,而后将其中反复执行的热点代码(热点检测),以方法为单位进行即时编译。

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

Android实现跨平台

Android其实基于Java语言的,所以同理,想要运行一段Android代码,也要经过多个步骤,将Android源代码转换成机器可以执行的机器代码。

但是这个转换过程在Android的不同版本中实现不尽相同:

Android 1.0(2008 年):采用一个名为 Dalvik 的虚拟机,并且集成了一个解释器。当 App 运行时,就会调用这个解释器,对代码进行逐句解释,速度很慢。

Android 2.2(2010 年):引入 JIT(Just In Time)即时编译机制,当 App 运行时,会将用户经常使用的功能编译为机器能直接执行的 010101 机器码,不用一句一句地去翻译。当出现不常用的功能时,再调用解释器来翻译;这样速度加快,但每次启动 App 都要重新编译一次,不能一劳永逸。

640?wx_fmt=jpeg

Android 5.0(2014 年 10 月):将虚拟机 Dalvik 换成 ART(Android Run Time),将 JIT 的编译器替换成 AOT(Ahead of Time)。如此,App 在下载后安装到手机上时同时把能编译的代码先编译成机器听得懂的 101010;剩下不太好翻译的代码,就在用户使用时再叫醒解释器来翻译。如此,不用每次打开 App 都需要编译,但安装 App 的时间有点长,而且占用手机空间。

640?wx_fmt=jpeg

Android 7.0(2016 年):采用混合编译机制,安装时先不编译中间代码,而是在用户空闲时将能够编译成机器码的那部分代码,通过 AOT 编译器先静态编译了。如果 AOT 还没来得及编译或者不能编译,再调用 JIT+ 解释器。这种机制,相当于用时间换空间,既缩短了用户安装 APP 的等待时间,又将虚拟机里编译器和解释器能做的优化提升到最大效率了。

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

Android编译的问题

可以看到,从2008年的Android 1.0开始,Android在编译优化上面在一直下功夫。

当前的 Android 采用的是解释执行 + JIT + AOT 的综合模式,在 空间占用+安装速度+运行速度 上已经达到了一个很好的平衡。

但是Android的编译问题一直被诟病。尽管在后续的Android 8.0 上改进了解释器,解释模式执行效率大幅提升;Android 10.0 上提供了预先放置热点代码的方式,应用在安装的时候就能知道常用代码会被提前编译。

但是,目前来看,无论如何,Android都没能摆脱这样一个前提:即应用在被打包成 APK 的时候,采用的还是 Java 代码。换句话说,在 APK 变成用户可应用的过程中,还经历了一个在 Android 系统内部的编译过程,这是一个绕不过的坎。

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

鸿蒙实现跨平台

那么,鸿蒙OS的代码编译是怎么样的呢?他又是如何解决跨平台的问题的呢?

640?wx_fmt=jpeg

从上图中可以看到,在鸿蒙OS架构中,方舟编译器多终端开发IDE扮演着重要的位置。

跨平台有一个最大的挑战,那就是各个平台的适配问题,尤其是目前各种设备类型越来越多,如何将同一个应用,在手机、手表、汽车、电视上面都可以适配的展示呢?这就是多终端开发IDE所做的事情。

640?wx_fmt=jpeg

使用华为提供的多终端IDE,多语言统一编译,分布式架构Kit提供屏幕布局控件以及交互的自动适配,支持控件拖拽,面向预览的可视化编程,从而使开发者可以基于同一工程高效构建多端自动运行App,实现真正的一次开发,多端部署,在跨设备之间实现共享生态。

640?wx_fmt=jpeg

上图就是华为提供的IDE,在里面可以通过图形化界面拖拽控件,并且IDE可以帮助自动适配各种终端设备。

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

有了IDE,开发可以方便的开发一套代码,这样可以自动适配到各种设备中,但是各种设备所执行的机器指令是不一样的,如何把这一套代码分别编译成各个设备需要的机器指令呢?

Android设备是由不同设备上内置的虚拟机进行编译的,所以编译之前就知道这个设备具体是什么了,那么,鸿蒙OS是怎么做的呢?这就是方舟编译器所干的事情了。

华为方舟编译器是首个取代Android虚拟机模式的静态编译器,可供开发者在开发环境中一次性将高级语言编译为机器码。此外,方舟编译器未来将支持多语言统一编译,可大幅提高开发效率。

640?wx_fmt=jpeg

Android之所以"慢",是因为他的编译过程是在终端进行的,也就是说需要在用户的手机上,通过虚拟机进行编译成可执行的机器代码。

而鸿蒙OS使用的方舟编译器,可以将高级语言(Java)直接变成机器码,从而绕过了虚拟机。并且这个编译过程并不是在用户的手机上完成的,而是在应用开发阶段就完成了。

640?wx_fmt=jpeg

通过方舟编译器,开发者的应用在下载之前就已经转化成为机器可以识别的代码,因而可以在手机上快速安装、启动和运行,而无需在经过 VM 的编译——某种程度上,方舟编译器是将编译过程提前到应用开发阶段,从而大幅度减少了智能手机和操作系统的运行负担。

华为官方介绍,方舟编译器是首家完全替代语言虚拟机的静态编译器,完全不需要解释器。兼顾Java开发效率和C语言运行效率的编译器。

除了代码编译,方舟编译器也提供了更高效的内存机制,它与 Android 内存回收的不同之处在于:

Android 在内存回收上采用集中回收机制,发声全局回收时更需要暂停应用,这也是随机卡顿的根因之一。而方舟编译器采用了引用计数法来进行内存的实时回收,并且配合使用了专门的消除环算法(消除对象互相引用带来的无法回收问题),来避免 GC 集中式回收带来的系统卡顿。相比 GC,方舟的内存回收是实时的而非集中式的,且不需要暂停应用进程,这样便大大消除了卡顿。

640?wx_fmt=jpeg

另外,就像JVM其实也是支持多种语言一样,华为表示,方舟编译器未来也会支持更过的开发语言。换句话说,其他语言的开发者,日后也能开发基于鸿蒙OS的应用。

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

参考资料: 

https://www.jishuwen.com/d/2NN3 

https://www.zhihu.com/question/339567108 

https://www.cnbeta.com/articles/tech/876171.htm https://www.cnbeta.com/articles/tech/876919.htm https://juejin.im/post/5cb07000f265da037d4f9be6

640?wx_fmt=png

福利

扫描添加小编微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!

640?wx_fmt=jpeg

推荐阅读:

  • 做了中台就不会死吗?每年至少40%开发资源是被浪费的!

  • 美女主播变大妈:在bug翻车现场说测试策略

  • 漫画高手、小说家、滑板专家……解锁程序员的另一面!

  • 手把手教你如何用Python模拟登录淘宝

  • 鸿蒙霸榜 GitHub,从最初的 Plan B 到“取代 Android”?

  • 每天超50亿推广流量、3亿商品展现,阿里妈妈的推荐技术有多牛?

真香,朕在看了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522135.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

apache ant 安装_Jmeter+ Ant+jenkins 接口自动化框架实现

一、文件配置•编写jmeter脚本 •上传jmx脚本到jmeter目录下,新建一个Loadtest目录,•在Tomcat webapp 文件夹下面新建报告输出文件夹testReport;•将jmeter中extras 文件夹ant-jmeter-1.1.1.jar 包放置于ant目录下lib文件夹 •将jmeter的ext…

机器学习必备:前20名Python人工智能和机器学习开源项目

摘要: 机器学习之旅必了解:前20名Python人工智能和机器学习开源项目! 如今机器学习和人工智能已经变得家喻户晓,有很多爱好者进入了该领域。但是,什么才是能够进入该领域的正确路径呢?如何保持自己跟上该领…

索非亚机器人的采访_还记得曾经扬言要“毁灭人类”的机器人索菲亚吗?如今过成这样...

如今人类电子信息技术的不断发展,人工智能大量出现在我们的生活之中,比如手机、电脑等,他们让我们的生活更加便捷和高效,人工智能作为一项服务人类的技术,在带给我们生活的便利的同时,却也让很多人表示担忧…

华为5G设备全球分布图曝光:欧洲占总量近6成;地平线发布首款车规级AI芯片,名叫征程2.0;奥迪与比亚迪达成电池供货协议……...

关注并标星星CSDN云计算极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go 首个金融教育主题微信小游戏…

阿里云全球首次互联网8K直播背后的技术解读

摘要: 3月28日,云栖大会深圳峰会现场,阿里云发布并现场演示了阿里视频云最新8K互联网直播解决方案。这是全球发布的首个8K视频云解决方案,也是全球首次8K互联网视频直播。 视频地址:https://v.qq.com/x/page/v0618atp7…

python画海绵宝宝_《1,2,3到动物园》数数书,适合幼儿园小班宝宝亲子共读,从游戏中了解数字的概念...

大家好,我是神桐妈妈,最近开始陆续给几个幼儿园做了有关绘本方面的师资培训,然后又有新的幼儿园要有了嵌入式幼儿园绘本馆,有了绘本,有了书香氛围,又有孩子们开始接触绘本,每天拿着一本绘本带回…

ESS控制台发布新功能:创建多实例规格的伸缩配置

摘要: 背景 原弹性伸缩ESS服务限定,生效的伸缩配置中只能对应一种实例规格,这样就会存在如果生效的配置中的实例规格的库存不足(高配实例规格通常更容易出现库存不足的情况)时, 用户配置好的伸缩规则以及伸…

在列表前方插入一个数据_通俗易懂的Redis数据结构基础教程

Redis有5个基本数据结构,string、list、hash、set和zset。它们是日常开发中使用频率非常高应用最为广泛的数据结构,把这5个数据结构都吃透了,你就掌握了Redis应用知识的一半了。string首先我们从string谈起。string表示的是一个可变的字节数组…

OpenStack精华问答 | NOVA计算服务

自诞生以来,OpenStack 似乎一直被质疑,其背后最重要的两大推手 NASA 和 Rackspace 都弃它而去,惠普、思科接连宣布关闭基于 OpenStack 的公有云服务,但是,OpenStack 依旧坚挺。1Q:NOVA计算服务A:1 实例生命…

java泛型_Java核心知识 基础五 JAVA 泛型

泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本 质是参数化类型,也就是说所操作的数据类型被指定为一个参数。比如我们要写一个排序方法, 能够对整型数组、字符串数组甚至其他任何类型的数组进行排序…

省钱小贴士(ECS):教你如何每年省出8w+ 块

摘要: 随着用户越来越多地使用阿里云的ECS服务,如何用最小的成本来保有ECS,成为用户越来越重要的关注点。为了更好的服务客户,ECS团队调整了系统盘的最小容量限制。 随着用户越来越多地使用阿里云的ECS服务,如何用最小…

相对熵与交叉熵_详解机器学习中的熵、条件熵、相对熵、交叉熵

目录信息熵条件熵相对熵交叉熵总结一 信息熵 (information entropy)熵 (entropy) 这一词最初来源于热力学。1948年,克劳德爱尔伍德香农将热力学中的熵引入信息论,所以也被称为香农熵 (Shannon entropy),信息熵 (information entropy)。本文只…

《CDN 之我见》原理篇——CDN的由来与调度

CDN是将源站内容分发至全国所有的节点,从而缩短用户查看对象的延迟,提高用户访问网站的响应速度与网站的可用性的技术。它能够有效解决网络带宽小、用户访问量大、网点分布不均等问题。 为了让大家更全面的了解CDN的原理、调度、缓存和安全等关键技术点&…

java实现apriori算法_各种排序算法的分析及java实现(一)

阅读本文约需要7分钟大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈)。上次老师跟大家分享了下用Navicat for Mysql导入.sql文件的相关知识,今天跟大家分享在 各种排序算法的分…

超越杭州、北京居首、广州晋级第一梯队……国内城市算力大起底!

戳蓝字“CSDN云计算”关注我们哦!近日,在2019中国人工智能计算大会(AICC2019)上,IDC与浪潮联合发布了《2019-2020中国人工智能计算力发展评估报告》。报告指出,计算力是承载和推动人工智能走向实际应用的基…

在阿里,我们如何管理代码分支?

摘要: 阿里有很多的研发团队,不同事业部使用的发布流程、分支策略并非整齐划一,但总体上看是比较规整的。其中有一种主流的发布模式以及对应的分支使用方式,称为“AoneFlow”。这套工作模式思路独特,在阿里以外的地方并…

linux杀掉80端口线程命令

80端口被其他程序占用, fuser -k -n tcp 80 查看端口是否启用 telnet ip地址 端口没有启动,显示拒绝: 端口启动,显示微笑:

.ne中的控制器循环出来的数据如何显示在视图上_【asp.net core 系列】3 视图以及视图与控制器...

0.前言 在之前的几篇中,我们大概介绍了如何创建一个http://asp.net core mvc项目以及http请求如何被路由转交给对应的执行单元。这一篇我们将介绍一下控制器与视图直接的关系。 1. 视图 这里的视图不是数据库里的视图,是一种展示技术。在http://asp.net …

为了让开发者写MaxCompute SQL更爽,DataWorks 增强SQL 编辑器功能

摘要: 众所周知,数据开发和分析的同学每天都要花大量时间写MaxCompute SQL;Dataworks作为数据开发的IDE直接影响着大家的开发效率,这次新上线的Dataworks我们在编辑体验上做了很多工作,在前端实现MaxCompute SQL和编辑…