当前位置: 首页 > wzjs >正文

建站工具论坛企业网站建设网页设计

建站工具论坛,企业网站建设网页设计,google广告投放技巧,太原网站开发定制文章目录 一、概述二、定义2.1解释执行2.2 JIT编译执行 三、测试代码3.1解释执行3.2 JIT执行 四、结果五、总结 Welcome to Code Blocks blog 本篇文章主要介绍了 [rbpf虚拟机-JIT和解释执行对比] ❤博主广交技术好友,喜欢我的文章的可以关注一下❤ 一、概述 该篇…

文章目录

  • 一、概述
  • 二、定义
    • 2.1解释执行
    • 2.2 JIT编译执行
  • 三、测试代码
    • 3.1解释执行
    • 3.2 JIT执行
  • 四、结果
  • 五、总结

Welcome to Code Block's blog

本篇文章主要介绍了
[rbpf虚拟机-JIT和解释执行对比]
❤博主广交技术好友,喜欢我的文章的可以关注一下❤

一、概述

该篇文章是记录rbpf虚拟机JIT执行和解释执行的速度对比。

(学习该虚拟机的目的是为了搞懂solana合约的执行方式,solana使用的rbpf是在该虚拟机上进行扩展。)

二、定义

2.1解释执行

代码在运行时由解释器逐行解释并执行,不需要提前编译。例如,Python、JavaScript等脚本语言通常采用解释执行。

2.2 JIT编译执行

JIT在程序运行时根据需要将部分代码(如热点代码)编译成机器码,而不是在程序运行前一次性编译所有代码。

三、测试代码

3.1解释执行

#[test]
fn test_process_time() {let start = Instant::now();let prog = assemble("mov32 r0, 0        mov32 r1, 10000000add32 r0, 1sub32 r1, 1jgt r1, 0, -3exit             ",).unwrap();let vm = rbpf::EbpfVmNoData::new(Some(&prog)).unwrap();for _i in 0..5 {assert_eq!(vm.execute_program().unwrap(), 0x989680);}let duration_with_jit = start.elapsed();eprintln!("未使用 JIT 的总时间: {:?}", duration_with_jit);
}

在上述代码中,使用解释执行,R0赋值为0,R1赋值为10000000,当R1不少于0时执行循环体,循环体内使R0加1,使R1减一,直到不满足循环条件时退出,此时应该返回R0的值为10000000(0x989680),该程序会被执行5次并记录时间。
解析执行
通过面图片,可以看到该程序总共运行了14秒钟。

3.2 JIT执行

#[test]
fn test_jit_time() {let start = Instant::now();let prog = assemble("mov32 r0, 0        mov32 r1, 10000000add32 r0, 1sub32 r1, 1jgt r1, 0, -3exit             ",).unwrap();let mut vm = rbpf::EbpfVmNoData::new(Some(&prog)).unwrap();vm.jit_compile().unwrap();let duration_with_jit = start.elapsed();eprintln!("编译时间: {:?}", duration_with_jit);unsafe {for _i in 0..5 {assert_eq!(vm.execute_program_jit().unwrap(), 0x989680);}}let duration_with_jit = start.elapsed();eprintln!("使用 JIT 的总时间: {:?}", duration_with_jit);
}

然后使用JIT编译和运行命令,执行同样的功能代码。
JIT执行
可以看到执行了执行了12毫秒,也就是1.2%秒。

四、结果

未使用 JIT 的总时间
从第一张图片可以看到,程序在未使用 JIT 的情况下,总共运行了约 ​14 秒。这包括了五次循环执行的时间以及解释器逐行解释代码的开销。

​使用 JIT 的总时间
第二张图片显示,使用 JIT 编译后,程序的总运行时间显著减少至 ​12 毫秒​。
考虑到 JIT 编译本身需要一定的时间(在代码中 vm.jit_compile().unwrap(); 所记录的编译时间),实际执行循环体的时间会更短。
因此,JIT 编译后的执行速度相比解释执行有显著提升。

五、总结

通过对 rbpf 虚拟机中解释执行和 JIT 编译执行的对比测试,我们可以得出以下结论:

​性能提升:JIT 编译在执行速度上显著优于解释执行,适合对性能要求较高的应用场景。
适用场景:对于需要频繁执行的热点代码,采用 JIT 编译可以带来明显的性能提升;而对于启动时间敏感或执行频率较低的场景,解释执行可能更为合适。
权衡选择:在实际应用中,可以根据具体需求和场景,选择合适的执行方式,或者结合两者的优点,采用混合执行策略,以达到最佳的性能和用户体验。

代码来源:rbpf虚拟机
鸣谢: qmonnet 提供的开源代码.

当然,我也会将带有中文注释和自己理解的一些代码上传的我的github页面,感兴趣的朋友可以进行clone查看.

我的GitHub:forked


感谢您的点赞、关注、收藏!
在这里插入图片描述


文章转载自:

http://cukH1fs4.sqgsx.cn
http://WROk2Xcv.sqgsx.cn
http://7sfrHUi5.sqgsx.cn
http://FrAyltGj.sqgsx.cn
http://MzcXeexw.sqgsx.cn
http://xGinQJU6.sqgsx.cn
http://3XQgzLC5.sqgsx.cn
http://1ifFsPTM.sqgsx.cn
http://BJtFBR7i.sqgsx.cn
http://Ap8PT0W7.sqgsx.cn
http://EYo3qjGM.sqgsx.cn
http://KBgS6dWo.sqgsx.cn
http://XalMfxvu.sqgsx.cn
http://UE0J1Lw0.sqgsx.cn
http://z62nJIV2.sqgsx.cn
http://HxU4TIqV.sqgsx.cn
http://uLTIR8e2.sqgsx.cn
http://Uk97P7al.sqgsx.cn
http://CQO80bHh.sqgsx.cn
http://BAQGhKj1.sqgsx.cn
http://veexzJ7y.sqgsx.cn
http://dYESa0mo.sqgsx.cn
http://bgp4gP8P.sqgsx.cn
http://sw6mGusG.sqgsx.cn
http://OFIKcTP4.sqgsx.cn
http://ooyygH1J.sqgsx.cn
http://tuEJXqsY.sqgsx.cn
http://wMJOfUrE.sqgsx.cn
http://N9cN9gYz.sqgsx.cn
http://ubWyV0Hb.sqgsx.cn
http://www.dtcms.com/wzjs/709272.html

相关文章:

  • 做网站上时需要3d预览功能wordpress iis7伪静态
  • 如何通过外链提高网站权重男女做羞羞漫画网站
  • 网站电脑速成培训班转短链接在线生成
  • 网站建设app西部数码网站流量怎么充
  • 沙田镇网站建设公司wordpress电影影视主题公园
  • 建设网店网站室内设计效果图及文字介绍
  • 淮北建设银行官方网站网站制作多久能完成
  • 网站建设与管理单招江西中恒建设集团网站
  • 如何通过c语言来做网站推进门户网站建设方案
  • 徐州网站定制公司哪家好万能浏览器手机版
  • 怎么申请网站域名赚钱天津百度seo推广
  • 颍上做网站足球比赛直播在线
  • wap网站制作网站dns刷新
  • 网站的首页设计网站建设费用都包括什么科目
  • 北京学生做兼职的网站北京手机专业网站建设公司
  • 鹤壁网站建设兼职网络维护协议范本
  • 做网站有没有效果宝塔为wordpress安装redis
  • 网站开发需求列表排名优化工具
  • 公司网站推广方案台州网站如何制作
  • asp.net网站入侵wordpress怎么安装到服务器
  • 做铝板的网站网站开发的类型
  • 建设银行网站会员有什么用上海装修做网站的倒闭了
  • 在线制作网站宣传视频中国最新的国内军事新闻
  • 网站 域名wordpress添加qq聊天
  • 厦门杏林建设企业网站wordpress全站音频
  • 行业平台网站开发自动化毕设题目网站开发
  • WordPress mk主题哈尔滨优化调整人员流动管理
  • 摄影网站cnu视觉联盟开发商延期交房怎么申请退房
  • 建设通网站免费注册东莞装饰网站建设
  • mvc中手把手做网站wordpress怎么生成网站地图