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


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


推荐阅读:

  • 漫话:如何给女朋友解释什么是CDN?

  • Spring 常犯的十大错误,打死都不要犯!

  • 一份工作坚持多久跳槽最合适?

  • linux中的技巧和快捷键总结


640喜欢我可以给我设为星标哦640

640?wx_fmt=jpeg 640?wx_fmt=jpeg

好文章,我 在看 

640?wx_fmt=jpeg

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

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

相关文章

腾讯研发动画组件,以后动画制作用PAG

你好,我是tiantian。 我们知道,动画特效可以辅助视觉制作焦点,引导注意力的方向,越来越为广大视觉设计师青睐,并广泛应用于各类场景开发。 关于动画设计工具,既有 Framer.js、Origami, 也有交互…

能直接修复代码 BUG,比 ChatGPT 还厉害

【公众号回复 “1024”,免费领取程序员赚钱实操经验】 大家好,又见面了,我是章鱼猫! 最近 ChatGPT 非常的火,而且是火出圈的那种,各个领域的人都知道。但是不得不说程序员做的工具,对程序员还是…

chatgpt赋能Python-ipv4地址python

IPv4地址 Python编程介绍 IPv4地址在互联网中扮演着非常重要的角色,英文名称为 Internet Protocol Version 4 Address。每一个连接到互联网上的设备都会被分配一个唯一的IPv4地址,它由32位二进制数以点分十进制的形式呈现出来。在Python编程中&#xff…

chatgpt赋能Python-pythonip地址是否合法

Python中如何判断IP地址是否合法 在网络中,IP地址是非常重要的概念。它用来标识网络中每个设备的唯一地址。IP地址通常分为IPv4和IPv6两种类型。在Python中,有多种方法可以判断IP地址是否合法。在本文中,我们将介绍如何使用Python编程语言来…

可喜可贺,暴雪即将收购第一家工作室Proletariat,魔法吃鸡停运

暴雪娱乐在超过15年的时间里收购了第一家工作室。在VentureBeat的一份报告中,该公司收购了总部位于波士顿的工作室Proletariat。 “经过四年多的元素魔法和咒语组合,我们决定结束Spellbreak的研发,”该公司在其网站上写道。“这些服务器将于2…

修改战网昵称服务器错误,暴雪又改了游戏平台名字 暴雪战网回来了

暴雪一定是个纠结的处女座,距离上一次更改游戏平台名称之后,8月15日早上6点,暴雪中国又一次在微博上发表公告称“暴雪战网品牌名称更新”,名字从上一次的暴雪游戏平台改成了暴雪战网。 按暴雪的意思来看,之所以玩这么一…

暴雪战网服务器维护,炉石无法通过暴雪战网服务进行登录

有很多玩家常常遇到战网无法登陆、炉石传说无法登陆至战网服务等问题。那么下面就告诉大家这种解决办法,希望对你有帮助! 1、关闭游戏或安装程序,打开任务管理器,终止以下进程:Agent.exe,Blizzard Launcher…

【吴恩达deeplearning.ai】基于ChatGPT API打造应用系统(上)

以下内容均整理来自deeplearning.ai的同名课程 Location 课程访问地址 DLAI - Learning Platform Beta (deeplearning.ai) 一、大语言模型基础知识 本篇内容将围绕api接口的调用、token的介绍、定义角色场景 调用api接口 import os import openai import tiktoken from dote…

ChatGPT讲故事,DALLE-2负责画出来!两大AI合作出绘本!

点击下方卡片,关注“CVer”公众号 AI/CV重磅干货,第一时间送达 点击进入—>CV微信技术交流群 转载自:机器之心 | 编辑:张倩、袁铭怿 生成式 AI 正在变革内容的生产方式。 在过去的一周,相信大家都被 ChatGPT 刷了屏…

ChatGPT绘本故事,引领孩子探索神奇世界!

现在很多家长忙于工作,无暇陪伴孩子,老人或者身边的带小孩的家人不会给孩子读绘本故事怎么办? 这时ChatGPT的出现就派上大用场了,只要有手机,不会读绘本的大人们及孩子们都可以轻轻松松地进入童话世界,同时…

iPhone、Mac上都能跑,刷屏的Llama 2究竟性能如何?

来自:机器之心 进NLP群—>加入大模型与NLP交流群 虽然性能仍不及ChatGPT 3.5,但开源的力量是无法估量的。 昨天凌晨,相信很多人都被 Meta 发布的 Llama 2 刷了屏。OpenAI 研究科学家 Andrej Karpathy 在推特上表示,「对于人工智…

谜题科技发布Enigma Alpha平台,开启AI生成决策动作篇章!

近日,上海数字大脑研究院孵化的独立初创企业谜题科技(Enigma Tech)发布了 AIGA(人工智能生成动作)系统 Enigma Alpha,实现了自然语言对话交互、工具增强的自然语言对话交互、以自然语言为接口的物理/虚拟世…

马斯克:用AI干掉AI

数据观 2023-04-17 14:48 发表于贵州 ❑ 导 读 马斯克呼吁暂停人工智能开发!然后,他成立了一家人工智能公司... 全文共计3189字,预计阅读时间7分钟 来源 | 数据观综合(转载请注明来源) 编辑 | 蒲蒲 OpenAI大型预训练人…

阿里开业项目chat2DB-人工智能SQL分析介绍

1. chat2DB简介 1-1. 简介 ​ chat2DB是一款有开源免费的多数据库客户端工具,支持windows、mac本地安装,也支持服务器端部署,web网页访问。和传统的数据库客户端软件Navicat、DBeaver 相比Chat2DB集成了AIGC的能力,能够将自然语…

探索AI对话技术的未来发展趋势

文章目录 一、chatgpt是什么?二、世界对于chatgpt的看法三、chatgpt会是拉普拉斯妖么?四、革命?现实意义存在么?五、人工智能总结 一、chatgpt是什么? 我们来看看其它人工智能给它的定义 在我看来chatgpt是一种对话方…

GPT 应该存在吗?

GPT是否应该存在呢?Scott Aaronson 认为在掌握更多信息之前,我们应该按兵不动。 作者 | Scott Aaronson 译者 | 弯月 出品 | CSDN(ID:CSDNnews) 我记得90年代,关于 AI 哲学的讨论无休无止,图…

从 Linux 安全看,eBPF 的出现是“天使”还是“恶魔”?

【CSDN 编者按】eBPF 目前已经成了安全研究人员和黑客手中强大的工具,亦正亦邪,取决于使用者的选择。 作者 | 许庆伟 责编 | 王子彧 出品 | OpenAnolis(龙蜥) 启示录 新约圣经启示录认为:恶魔其实本身是天使&#x…

182-问chatGPT想一点游戏职业

问了一下chatGPT帮我想出一些游戏职业 1.精灵剑士- 长着修长耳朵、娇小玲珑的精灵女孩,手持一把细长的剑,身穿华丽的绿色铠甲。 2.亡灵法师-看起来非常阴森恐怖的法师,蓝色的长袍下暗藏着黑色的甲胃,手中握着一根水晶魔杖. 3.火焰…

基于Spark的FPGrowth(关联规则算法)

转载请标明出处:小帆的帆的专栏 例子: 总共有10000个消费者购买了商品, 其中购买尿布的有1000人, 购买啤酒的有2000人, 购买面包的有500人, 同时购买尿布和啤酒的有800人, 同时购买尿布的…

Matlab隐藏彩蛋

Matlab中的彩蛋实现与Matlab的版本有着重要关系,像Android一样,不同的版本对应不同的彩蛋。这里以Matlab 2016A为例。 1.最著名的一个,命令行窗口输入“image”,就会出现一张倒置的小孩脸,不知情的使用者很可能会被吓…