首页 >>  正文

python实验报告全套

来源:baiyundou.net   日期:2024-09-21

整理 | 苏宓

出品 | CSDN(ID:CSDNnews)

近日,来自多伦多大学和 YScope 公司(为软件系统提供创新的日志管理和故障排除工具。由一群计算机工程教授和博士创立)的 David Lion、多伦多大学 Adrian Chiu 和 Michael Stumm、多伦多大学和 YScope 公司 Ding Yuan 共同发布了一份《调查托管语言的运行时性能:为什么 JavaScript 和 Python 比 C++ 慢了 8 倍和 29 倍,而 Java 和 Go 却能更快》(https://www.usenix.org/system/files/atc22-lion.pdf)的论文分析报告,深度剖析了不同编程语言运行时在代码开发中真实的性能情况,由此方便开发者可以精确地测量执行任何字节码指令所花费的时间等。

性能是系统软件不得不面对的挑战

在报告中,研究人员指出,自 2015 年以来,具有集成运行时环境的编程语言越来越受欢迎,其中,全球知名的代码托管平台 GitHub 上最受欢迎的三种语言分别是 JavaScript、Java 和 Python。

作为开发利器,编程语言帮助开发者快速构建各种应用程序和服务,也极大地提高了生产力。同时,这些语言自身也提供了各种功能,如动态类型检查、带有垃圾收集的内存管理,以及动态内存安全检查等等。为此,研究人员用「托管语言」(managed languages)专业术语来指代这些类型的编程语言。

现实来看,托管语言越来越多地被用于实现性能至关重要的系统软件上,如Hadoop 和 Spark 都在 Java 虚拟机(JVM)上运行,因为它们分别用 Java 和 Scala 实现;Kubernetes、etcd(分布式键值存储)和 M3(由 Uber 建立的分布式时间序列数据库和查询引擎)都是用 Go 实现的。

当前,甚至连操作系统(OS)的内核 Biscuit 也是用 Go 实现的 。Openstack、Paypal、Instagram 和 Dropbox 都大量使用 Python,其中,Python 是 Dropbox "在后台服务和桌面客户端应用中使用最广泛的语言",在一个存储库中就有近 400 万行 Python 代码;JavaScript 也被用于 Facebook 的 Bladerunner pub/sub 系统的性能关键路径中。

在开发过程中,编程语言的性能在一开始很少会被考虑到项目中,部分原因是不少开发者认为性能问题可以在以后慢慢去解决,也许可以通过简单地增加硬件来进行横向扩展。

不过,随着代码产品或服务使用规模的扩大,服务变得越来越慢或者硬件成本变高,性能成为一个不容忽视的问题。这也是为什么 Stream 要放弃了 Python 而改用 Go、 Discord 从 Go 切换到 Rust、Twitter 从 Ruby on Rails 切换到 Scala 和 Java 的主要原因。

不少开发者往往为了提升性能,想破脑袋,但现实只有两条路,一条是从现有的代码中想尽办法尽可能地做优化,另一条是思考使用的编程语言是否已经达到了性能极限,看看有没有必要将旧的代码移植到一个新的性能更高的语言上。

为了彻底解开系统软件中不同编程语言导致的性能问题,研究人员决定以 C++ 为极限,对 Java、Go、JavaScript 和 Python 四种编程,还有应用最广泛的运行时系统 CPython、OpenJDK。Node.js 与 JavaScript 的 V8 引擎进行深入的定量性能分析。

同时,研究人员还从头开始建立了 6 个应用程序,并创建了一个名为 LangBench 基准(https://github.com/topics/langbench)。这些应用程序涵盖了各种不同的计算强度、内存使用、网络和磁盘 I/O 强度以及可用的并发性的应用场景等复杂性。对此,研究人员全面分析了它们的完成时间、资源使用和可扩展性。

测试方法

值得一提的是,研究人员指出,这份论文没有也不可能全面地回答与语言运行时的性能有关的每一个问题。本文只是评估了四种语言的运行时,而且对于每种语言,只评估了最广泛使用的实现。此外,研究人员只在一个单一的操作系统/硬件堆栈上运行了工作负载。其研究结果与使用的基准有关,这些基准模拟了现实生活中的应用,但可能不代表广泛的应用。

在测试方法上,研究人员在两台内部服务器上进行了实验,每台服务器有 2 个Xeon E5-2630V3、16 个虚拟核心、2.4GHz CPU、256GB DDR4 内存和两个 7200 RPM 硬盘。它们运行的系统是 Linux 4.15.0,并通过 10Gbps 的互联网络连接。

对于 C++ 程序,研究人员使用的是 GCC 9.3.0 根据 C++17 标准用 -O3 进行编译。对于 OpenJDK 13、CPython 3.8.1 和Go 1.14.1 ,其使用了各自语言的参考实现。同时,使用 Node.js 13.12.0 和 V8 7.9.317.25 版本。

研究人员对每个基准进行了 5 次测试,取平均值。其中,在运行键-值存储、日志分析器和文件服务器的基准时,client 和 worker 线程的数量从 1 到 1024 不等。对于 OpenJDK 和 V8 来说,最小的内存量是通过确定不会导致崩溃的第一个堆配置来设置的;对于 Go 来说,GOGC 被设置为5%。然后研究人员不断增加堆的设置,直到性能不再提高。其使用第一个设置的结果(即最小的堆大小)得出最佳性能。对于日志解析器和文件服务器基准,所用的日志文件被存储在一个复制系数为 2 的分布式文件系统上。 在运行每个基准之前,研究人员都清除了 Linux 的页面缓存,以保证测试准确性。

Java、Go 更具竞争力,JavaScript、Python 比 C++慢了 8 倍和 29 倍

最终 LangBench 中各项基准的运行时间结果如下所示:

其中,优化的 GCC 平均速度最快,Go 和 OpenJDK 紧随其后,比 GCC 慢了 1.30 倍和 1.43 倍。令人印象深刻的是,在 12 项基准测试中,Go 和 OpenJDK 有 3 项超过了优化的 GCC。

总体而言,研究人员发现 V8 / Node.js 和 CPython 表现最差,执行应用程序的平均速度分别比 C++ 应用程序慢 8.01 倍和 29.50 倍,这意味着运行时下,JavaScript、Python 要比 C++ 慢这么多。更糟糕的是,这两个运行时上的应用程序扩展性很差,因为它们无法有效地利用多个内核。在极端情况下,CPython 比 GCC 慢了 129.66 倍(在排序基准中)。V8/Node.js 和 CPython 只有在工作负载受到磁盘 I/O 的瓶颈时,即在文件服务器基准中,才与 GCC 有竞争力。

相比之下,OpenJDK 和 Go 应用程序即 Java 和 Go 语言比 C++ 更具有性能竞争力,运行速度仅慢了 1.43 倍和 1.30 倍,并且可以轻松扩展到多个内核。在一些应用中,OpenJDK 和 Go 的性能超过了 C++ 的同类产品。

更多完整报告内容详见:https://www.usenix.org/system/files/atc22-lion.pdf

","force_purephv":"0","gnid":"908dffbf5646ca520","img_data":[{"flag":2,"img":[{"desc":"","height":"80","s_url":"https://p0.ssl.img.360kuai.com/t0186957a1ca5352752_1.gif","title":"","url":"https://p0.ssl.img.360kuai.com/t0186957a1ca5352752.gif","width":"640"},{"desc":"","height":"526","title":"","url":"https://p0.ssl.img.360kuai.com/t0182549b52cf6af18c.jpg","width":"1080"},{"desc":"","height":"656","title":"","url":"https://p0.ssl.img.360kuai.com/t01e5ed784d8fe8d561.jpg","width":"1080"}]}],"original":0,"pat":"art_src_1,sexf,sex4,sexc,disu_label,fts0,sts0","powerby":"hbase","pub_time":1659073986000,"pure":"","rawurl":"http://zm.news.so.com/6ce76516b47ec78c43e7dd7b8458d642","redirect":0,"rptid":"3fd10aa1d1fce8dd","s":"t","src":"CSDN","tag":[{"clk":"ktechnology_1:java","k":"java","u":""}],"title":"JavaScript、Python 比 C++ 慢 8 倍、29 倍?

盛飞林4491asp实验报告 -
崔纪贱13542528258 ______ 1.若Dreamweaver已安装好那么就在桌面上双击Dreamweaver打开,然后点击“文件”-“新建”创建html文件 比如文件名称为:1.html 2.在Dreamweaver中把1.html切换到设计界面 3.在Dreamweaver菜单中点击 插入-表格(设置好行和列)-点击确定后表格就建成了 4.表格首行要合并列用colspan属性比如合并3列那么设置为 colspan="3"在首行<td>标记中加入课程表 命名标题

盛飞林4491Python实验:采用多线程在一个文件中查找特定字符串 -
崔纪贱13542528258 ______ import threading , time def countstr(f): global findstr,occurtimes times=0 for string in f: if findstr in string: times+=1 occurtimes.append(times) occurtimes=[] threadnum=int(raw_input("please input thread number:")) filename=raw_input("please ...

盛飞林4491领导调研报道 - 政府领导出去调研,调研是什么意思新闻中总看到政府领导出去调研,
崔纪贱13542528258 ______ 调研是调查研究的简称,指通过各种调查方式,比如现场访问、电话调查、拦截访问、网上调查、邮寄问卷等等形式得到受访者的态度和意见,进行统计分析,研究事物的总的特征. 调研的目的是获得系统客观的收集信息研究数据,为决策做准备.

盛飞林4491工商管理模拟实验报告 -
崔纪贱13542528258 ______ 原发布者:nice碧落黄泉 TOP-BOSS实验报告公司名称:金壹朝阳有限责任公司小组成员:二O一四年十月二十日一、实验名称:TOP-BOSS企业经营模拟运营二、实验目的:1、通过学习,发展跨部门整合的能力,训练出更好的决策能力和决...

盛飞林4491实验报告中的结果应该写什么 -
崔纪贱13542528258 ______[答案] 实验结果就是通过数据统计,写出自己实验最后的结果,分析为什么是这种现象,如果和理想结果对应上了,就分析实验中还有哪些做得不足,如果和理想结果没有对应上,分析其中原因,比如对变量的控制没有严格按照要求等等.最后,对该试验有...

盛飞林4491实验报告怎样写啊? -
崔纪贱13542528258 ______ 一, 程序功能 本程序利用指针,链表,文件,以及字符串等各种操作,实现程序功能:字典管理.二, 题目分析 与前两题不同,本题需大量利用指针和链表操作.这无形中增加了题目的难度.由于指针这部分知识掌握得不牢固,加上链表和文...

盛飞林4491ASP实验报告 - - 怎么写
崔纪贱13542528258 ______ 安装IIS 1、打开 Windows XP 【控制面板】中的【添加和删除程序】然后选择【添加/删除Windows组件】会弹出一个【Windows组件向导】对话框,如下图: 点击“下一步”,选择完毕,按下“确定”按钮,IIS将自动安装在系统中, 安装完毕...

盛飞林4491推荐几部经典怪物电影,类似极度深寒那样的,不要过于恶心的;动作电影 惊悚电影等 -
崔纪贱13542528258 ______ 《刺》《迷雾》《魔窟》兽餐123人间炼狱变蝇人蚊人魔蝇入侵惊心食人族尸骨无存神秘的地洞...

盛飞林4491一个完整的实验方案包括哪几部分 -
崔纪贱13542528258 ______[答案] 实验起因 实验目的 实验器材 实验操作 数据记录 误差分析 实验结果 联想

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024