HybridCLR原理中的重点总结

序言

该文章以一个新手的身份,讲一下自己学习的经过,大家更快的学习HrbirdCLR。

我之前的两个Unity项目中,都使用到了热更新功能,而热更新的技术栈都是用的HybridCLR。

第一个项目本身虽然已经集成好了热更逻辑(使用HybridCLR),但是热更逻辑都是主程在处理的,而我主要是做UI的界面和业务逻辑功能,基本没接触到HybridCLR。

而第二个项目需要自己把热更新功能搭建起来,于是就使用了第一个项目的已经完成的HybridCLR的框架代码,根据第一个项目做修改,来自己一点点把HybridCLR搭建起来。

所以我现在是一个处理好了HybridCLR逻辑,但是不懂原理的Unity新手状态。

于是引出这个文章,该文章不是讲解HybridCLR在Unity下的热更实现细节,而是讲HybridCLR的需要注意原理重点。

重点总结

用HybridCLR的官网上的一个简介来引出重点。

HybridCLR是一个特性完整、零成本、高性能、低内存近乎完美的Unity全平台原生c#热更方案。

HybridCLR扩充了il2cpp的代码,使它由纯AOT runtime变成AOT+Interpreter 混合runtime,进而原生支持动态加载assembly,使得基于il2cpp backend打包的游戏不仅能在Android平台,也能在IOS、Consoles等限制了JIT的平台上高效地以AOT+interpreter混合模式执行,从底层彻底支持了热更新。

HybridCLR不仅支持传统的全解释执行模式,还开创性地实现了 Differential Hybrid Execution(DHE) 差分混合执行技术。即可以对AOT dll任意增删改,会智能地让变化或者新增的类和函数以interpreter模式运行,但未改动的类和函数以AOT方式运行,让热更新的游戏逻辑的运行性能基本达到原生AOT的水平。

 这是HybridCLR官网开头的一个简介,这段文字包含了几个比较重要的信息,如果没有了解过的同学,对于这些信息就不能抓住。

重点主要有以下几个:

IL2CPP

AOT

Interpreter

DHE

IL2CPP

我们先从字面理解,IL意思就是中间语言(Intermediate Language),CPP是C++。所以IL2CPP意思就是:中间语言转换为C++。

再让我们来看一下Unity官方文档的说法:

The IL2CPP (Intermediate Language To C++) scripting backend
 is an alternative to the Mono backend. IL2CPP provides better support for applications across a wider range of platforms. The IL2CPP backend converts MSIL (Microsoft Intermediate Language) code (for example, C# code in scripts) into C++ code, then uses the C++ code to create a native binary file (for example, .exe, .apk, or .xap) for your chosen platform.

 首先,希望大家能在不翻译的情况下,阅读完这个概述。如果实在不理解其中的一些单词,可以在整句翻译之后,再回来查看这段文字的意思(很多情况下,英文的理解和中文是不一样的)。

其次,在理解了以上概述的意思之后,我们来查看Unity中IL2CPP的配置,在Project Setting -> Player 选项里:

Scripting Backend 有两个选项,Mono和IL2CPP。

然后,现在我们得知,IL2CPP是将C#转换为中间语言,再将中间语言转换为C++,再转换为我们所编译的平台对应的二进制文件(.exe、.apk或.xap)。

而Mono是通过在发布平台生成对应的Mono VM(Mono VM即Mono的解释器,有关解释器,之后会说到)来处理的。

以上是IL2CPP和Mono这两个选项的主要区别。

在我个人看来,中间语言以后会有比较大的发展,因为像现在Javascript等语言也在依托于中间语言,获得了较大的性能提升。

大家对IL2CPP还想更详细的了解的话,可以查看:

https://blog.csdn.net/Devil_MayCare/article/details/106378192

https://zhuanlan.zhihu.com/p/19972689

AOT

AOT的解释

AOT的全称是Ahead Of Time,字面意思是运行前编译。

程序的运行按编译方式来区分的话,主要有两种方式:静态编译动态编译

而我们通常也可以将静态编译称为AOT

静态编译

静态编译是在运行前被翻译为机器码,可以直接编译目标平台识别和运行。

优点:这样的程序运行速度相对于动态编译来说会快很多

缺点:就是在我们修改代码的时候,每次测试修改过的代码,都会执行一次编译,这样相对于动态编译来说,开发效率会低一些。

还有一个最重要的缺点就是:静态编译如果要修改已经发布的程序,必须要打包,然后替换掉线上的程序。

动态编译

动态编译是在运行的时候,需要有一个解释器解释器会随着程序一起打包,才被对应语言的解释器进行解释成机器语言,然后再由机器运行。

缺点:就是在运行时的速度比静态编译慢很多

优点:在开发时,不需要等待编译的过程,相对来说,开发效率会高一些。

同样最重要的优点:动态编译可以直接修改包里的代码,替换了包里的代码后,就可以完成程序更新的需求。

而我们也可以将动态编译称为JIT

JIT的解释

即Just-In-Time,字面意思是即时编译,也可以称为运行时编译。

对应关系

所以我们从AOT整理出静态编译,再整理出动态编译,再整理出JIT

现在我们整理出Unity根据编译类型来划分的对应关系:

静态编译->AOT->IL2CPP

那么动态编译也是有对应关系的:

动态编译->JIT->Mono

其中AOT->IL2CPP和JIT->Mono这两条对应关系的原理,在IL2CPP这一节中已经讲过,大家可以往回看一下。

各种编译类型的语言

静态编译(AOT)主要是以C/C++等语言为主,而动态编译(JIT)主要是以lua、Javascript、python等为主。

还有就是有些语言既可以支持AOT,也支持JIT,其中就包括C#、Javascript(前面就说过现在Js也可以处理为中间语言,再转换为C++)。

热更需求

在Unity开发出来的游戏,会需要上传到对应平台(Android的Google Play、iOS的AppStore),然后用户使用Android或iOS对应平台上下载下来。

那么在我们更新了一点功能之后,用户又需要从Android或iOS平台上再下载一次,这是比较不友好的用户体验。

那么现在我们的需求就是:在我们更新了功能之后,用户打开游戏,直接下载我们更新的功能代码和图片资源等(下载更新的功能代码和图片资源到平台的可读写目录,速度较快,不怎么影响用户体验),直接就能体验到新功能。

以上这个需求就是热更新。

遇到问题

那么现在我们的情况是

IL2CPP->速度快,但是不能热更新(前面说过了,IL2CPP需要编译,打包,再替换平台上的程序)。

JIT->速度慢,但是能热更(将代码或资源下载到平台的可读写目录,等程序运行的时候,会自动运行平台的可读写目录中的代码)。

所以现在的想法是可不可以将IL2CPP改造为可以热更的IL2CPP,于是需要加上Interpreter,组成了HybridCLR的官方解释中的AOT+Interpreter。

这也就是HybrildCLR要解决的问题。

Interpreter

Interpreter的意思是解释器(和动态语言中提到的解释器是同一个意思),是动态语言实现动态更新的必要逻辑,像前面提到的Mono VM就是解释器,而Javascript的解释器有V8、SpiderMonkey等。

但是,HybridCLR中的Interpreter和其他语言的Interpreter又有一个区别,那就是HybridCLR的Interpreter只处理dll库的选择,不是解释dll库中的代码

这是HybridCLR能继续保持静态编译(AOT)类型的一个关键。

这种技术是在Mixed Mode Execution中获得的启发。

Tips:与解释器对应的就是编译器,编译器有LLVM、GCC等。大家有兴趣可以自己查询。

DHE

这是HybridCLR的一个商业版本才提供的技术支持。

这个了解不多,大家在官网查看即可。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

楼道灯微波雷达模块模组,智能感应uA级超低功耗替换红外传感器,飞睿助力绿色照明

随着科技的飞速发展,LED楼道灯早已不仅仅是照亮我们回家路的工具,它们正变得越来越智能、高效和环保。今天,就让我们一起探索LED楼道灯背后的科技——飞睿智能微波雷达模块模组,以及它如何以超低功耗(uA级别&#xff0…

信息化安全管理怎么做

企业如何做好安全管理工作?检查频次多了怕影响子正常生产经营,效益低下,检查频次少了又担心管控不住。”这是安全管理部综合业务室的困惑,也是很多企业的困惑。面对企业在安全管理中的困惑与挑战,采用信息化平台与精细化管理策略…

强烈推荐!!李沐老师《动手学深度学习》最新Pytorch版!

动手学深度学习(PyTorch版)》是由李沐、Aston Zhang和孔德威共同编写的教材,专为深度学习初学者和实践者设计。本书使用PyTorch作为主要的深度学习框架,全面系统地介绍了深度学习的基本理论、常见模型和实际应用技巧。 书中内容包括深度学习的基础知识、…

华南师范大学“大学生校外实践教学基地”授牌仪式暨见习参观活动圆满结束

为促进校企合作的深入发展,培育出具有实际应用技能的人才,7月9日,华南师范大学数学科学院与广东泰迪智能科技股份有限公司联合开展“大学生校外实践教学基地”授牌仪式暨见习参观活动。华南师范大学数学科学院数据科学系主任陈艳男、副主任陈…

物联网实训室建设可行性报告

一、建设物联网实训室的目的和意义 随着信息技术的快速发展,物联网(IoT)已成为推动社会进步和经济发展的关键技术之一。物联网技术的集成应用,不仅能够提高生产效率,还能促进智慧城市、智能家居、智能农业等多个领域的…

企业网站源码系统 自主快速搭建响应式网站 海量模版随心选择 带完整的源代码包以及搭建教程

系统概述 企业网站源码系统,是一款专为中小企业量身定制的网站建设解决方案。该系统基于先进的Web开发技术,融合了模块化设计理念和用户友好的操作界面,旨在帮助企业用户无需编程基础,即可轻松搭建出符合自身需求的响应式网站。通…

星环科技推出语料开发工具TCS,重塑语料管理与应用新纪元

5月30-31日,2024向星力未来数据技术峰会期间,星环科技推出一款创新的语料开发工具——星环语料开发工具TCS(Transwarp Corpus Studio),旨在通过全面的语料生命周期管理,极大提升语料开发效率,助…

衣服、帽子、鞋子相关深度学习数据集大合集(2)

继续为大家分享关于衣帽鞋子的深度学习数据集,主要有衣服、帽子、鞋子、短裤、短袖、T恤等。 1、人头上带着各种帽子图片数据集 数据格式:图片 是否标注:已标注 标注格式:yolov8 图片数量:1853张 数据查看地址&a…

捷配生产笔记-细间距芯片的表面处理工艺:OSP与沉金工艺的重要性

在现代电子制造领域,随着技术的进步,电子设备变得越来越小型化和高性能化。细间距芯片作为实现这一目标的关键组件,其制造工艺要求极为严格。在这些要求中,表面处理工艺尤为关键,因为它直接影响到芯片的焊接质量和长期…

叉车司机疲劳检测系统解决方案

在日益繁忙的物流仓储和工业制造领域,叉车司机的工作强度逐渐增大,疲劳驾驶的风险也随之提升。因此,我们提出了一套能够准确检测叉车司机疲劳状态的系统,以确保驾驶安全,提高工作效率。 安全监控功能主要透过三颗独立摄…

Git协作

文章目录 Git协作冲突冲突的发生情况解决冲突如何处理冲突 1 分支1.1 什么是Git分支1.2 创建分支 2 切换分支2.1 指向分支2.2 暂存分支切换分支与未提交更改的处理使用 Stash 临时保存更改Stash 的工作原理:场景设定使用 Git Stash 3 远程分支3.1 快进合并快进合并的…

亲测,爱回收严选买电脑真的靠谱

近日想买电脑,在某东的爱回收严选看到了9成新的MacBook Pro 2020,因为之前在爱回收严选买手机安全下车,所以我对这个店铺还是信任的,这次买电脑也就没有多犹豫,爱回收严选也确实没让我失望! 爱回收严选买二…

为什么大多数过来人还是建议你考一本HCIE

HCIE认证是华为推出的高级网络工程师认证。 然而,对于是否值得考取HCIE,许多人有不同的看法。 有些人质疑它的价值,但也有很多过来人强烈推荐。 今天探讨一番。为什么尽管有质疑声,许多经验丰富的老网工还是建议你考一本HCIE。 01…

MySQL的约束键多表查询

约束 概念 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。目的:保证数据中数据的正确、有效性和完整性。 外键约束 概念 ​ 外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。 注意&#x…

Autosar网络管理:发出第一帧网络管理报文的方法

Autosar网络管理:发出第一帧网络管理报文的方法 1. 为什么要第一帧发出网络管理报文 很多OEM要求CAN网络管理第一帧发出的是网络管理报文,目的是为了快速唤醒CAN网络 2. 节点外发第一帧报文不是网络管理报文的原因 首先根据AUTOSAR CANNM规范要求,节点要能够发出网络管理…

SepViT: Separable(分离式) Vision Transformer

Vision Transformers(ViT)在一系列的视觉任务中取得了显著的成功。然而,这些Transformer模型通常依赖大量的计算成本来实现高性能,这使得在资源受限的设备上部署它们变得非常困难。研究者们从深度可分离卷积(depthwise separable convolution)中汲取经验,并模仿其设计理…

构建高质量数据集与智能数据工程平台:播客AI Odyssey深度对话实录

对话整数智能联创和前IDEA研究员:构建高质量数据集与智能数据工程平台 - AI Odyssey | 小宇宙 - 听播客,上小宇宙 人工智能技术的日益深远发展,对人工智能的性能提升与技术迭代提出了新的要求。在大模型训练中,已有的研究和实践表…

机器学习笔记之监督学习

基本概念 用于训练模型的数据集称为:训练集 成本函数/代价函数:指示模型的运行情况,用于衡量训练数据与该直线的拟合程度。将预测值和目标值做差,该差值也被称为“损失值”。 例如我们需要计算平均的平方误差来衡量 成本函数/…

数字信号处理及MATLAB仿真(5)——z变换

采样的其他概念咱们后面再慢慢的讲述吧,先把z变换的程序给大家展示一下,总的来说呢,就用一个函数——ztran就行了。在 MATLAB 中,可以使用 ztrans 函数来进行 Z 变换。ztrans 函数用于对离散时间信号或系统进行 Z 变换&#xff0c…

Linux防火墙-Netfilter和iptables

文章目录 防火墙概述Netfilternetfilter五个勾子函数三种报文流向 iptables的组成五表table五链chainiptables规则添加时考量点实验:控制某个主机谁可以访问谁不能访问1.实验环境准备2.iptables命令格式详解:3.拒绝某个服务器ping 防火墙概述 防火墙&am…