实用第一f智慧密集
■BBaSEIEieSI3l3BBI3SeSBI3BBEIISBBBI3BI9@SI3eSI3aiSieEISeBI3ei3iaEIBBeBI3BaEIEII3SS@ieEl®
基于特定领域的当下主流计算机编程语言选用分析
罗亦言,江春
(南宁学院,南宁530200)
摘要:随着信息时代的到来,“互联网+”与人们的生活早已融为一体,上至卫星火箭,下至生活用品,无不是由工厂里的流水线生产出来,而流水线的运作依赖于各式各样的系统程序,这些系统程序则是由开发人员使用不同的计算机编程语言实现的。如今,信息时代提供给人们庞大的信息来源,编程语言的学习门槛也逐步降低,许多小学都开设了编程课程,而编程语言种类繁多,对于如何进行选择仍是初学者迷惑的问题,因此通过对当下主流编程语言性能和用途方面的比较,提供一定的编程语言选用参考。
关键词:编程语言;语言性能;开发用途;语言选型;选用分析
1概述
编程语言由1946年ENIAC所支持的机器语言,经
历了汇编语言,到1956年世界上第一个被正式推广使
用的高级语言FORTRAN开始正式使用,经历了60余
年的发展,至今的编程语言数目早已数不胜数,而编程
语言之所以种类繁多,主要的原因在于每种编程语言的
诞生大多是因为解决一个实际问题,之后由于在某些领
域具备了一定优势,从而得到强大的生命力,被更多的
开发人员所学习和使用。
程序设计包含了分析、设计、编码、测试、排错等
多个阶段,由于计算机是无法识别任何除机器语言之外
的其他语言,因此,在通常情况下,源代码均需要将其
翻译成机器语言才能执行,这一过程具有两种不同的方
式,其一是编译,其二是解释,其他阶段均有相同的做
法,所以编程语言因翻译的过程不同而分为编译型语言和解释型语言两种类型。
编译型语言是指源代码需要经过编译生成中间文件,之后经过链接库和其他文件等过程后,用可执行文件的形式来运行程序。
解释型语言是指源代码无需经过处理,在程序需要运行时,通过语言环境逐行读取并执行。
表12021年1月TIOBE社区编程语言排行榜
Jan2021Jan2020Change Programing Language RaLings Change 2C17.38%+1.61% 2Java11.96%-4.93%
33PyLhon11.72%+2.01%
44C++7.56%+1.99%
55C# 3.95%-1.40%
66Visual Basic 3.84%-1.44%
(数据来源:www.tiobe/tiobe-index/)
Jan2021Jan2020Change Programing Language RaLings Change 77JavaScripL 2.20%-0.25%
88PHP 1.99%-0.41%
918尹f R 1.90%+1.10%
1023f f Groovy 1.84%+1.23%
1115f f Assembly language 1.64%+0.76%
1210SQL 1.61%+0.10%
139引引SwifL 1.43%-0.36%
1414Go 1.41%+0.51%
1511引引Ruby 1.30%+0.24%
1620ff MATLABA 1.15%+0.41%
1719f Perl 1.02%+0.27%
1813引引ObjecLive-C 1.00%+0.07%
1912引引Delphi/ObjecL Pascal-0.20%0.79%
2016引引Classic Visual Basic0.79%-0.04%
TIOBE排行榜是基于世界范围内的自身软件工程师和第三方供应商的数据,按月更新榜单排行,意在反映编程语言的热门程度,因此,根据表1的TIOBE社区编程语言排行榜前20的榜单,从中选取具有代表性的10个编程语言,如表2所示,进行语言性能和用途方面的分析。
基金项目:2019年南宁学院校级自然科学项目《基于大数据形式站信息管理平台的设计与实现一以南宁学院为例》(编号:2019XJ26)o
作者简介:罗亦言(1995-),男,本科,助理工程师,研究方向:软件开发、网络安全;江春(1984-),男,硕士,副教授,研究方向:软件开发、数据库技术
。
软件研发与应用SOFTWARE DEVELOPMENT&APPLICATION
表2所选分析的编程语言及其相关信息表
编程语言语言类型常用领域表单排行C编译型底层应用、跨平台应用、嵌人式开发1
Java编译型Web后端、跨平台应用2 Python解释型数据处理、人工智能、嵌人式开发、Web后端3
C++编译型底层应用、跨平台应用、嵌人式开发4
C#编译型Web后端、跨平台应用5 JavaScript解释型Web应用、跨平台应用、人工智能7 PHP解释型Web后端8
SQL-数据库操作12 Swift编译型IOS应用13 MATLAB解释型数据处理、数学计算16
2环境与测试
根据上述10种编程语言常用的领域,将其分为如下几组类型进行测试。
底层应用:C、C++;
跨平台应用:C、C++、Java、C#、JavaScript;
嵌入式开发:C、Python、C++;
Web后端:Java、Python、C#、JavaScript、PHP;
数据处理:Python、Matlab;
人工智能:Python、JavaScript;
而由于SQL是MySQL、Oracle等常用数据库均支持的结构化查询语言,仅用于数据库操作,已成为数据库行业标准,其仅作为各数据库系统识别并响应开发人员对各项数据的操作需求,无外部库的引用,且执行效率取决于数据库系统自身的算法和编程语言性能,故不进行讨论。
为排除硬件设备计算能力对编程语言性能的影响,实验部分所使用的服务器设备相关信息如下:
CPU:Intel i9-9900k5.0GHZ
GPU:ASUS ROG-STRIX-RTX2080TI-A11G-GAM-ING1650MHZ x1
内存:Corsair Vengeance LPX16G3000MHZ伊4
主板:ASUS ROG Maximus XII Formula
操作系统:Microsoft Windows10LTSC2019
主硬盘:Samsung PM981A PCIE NVME1T x1
副硬盘:Western Digital Caviar Green1TB SATA3 64M(WD10EZRX)x1
同时,为进一步接近生产环境,该设备将会根据后续测试所需,使用Hyper-V进行虚拟化,分配的Windows10LTSC2019x64虚拟机、CentOS8.3.2011x64和Ubuntu20.04.2.0,虚拟配置均为2核心4进程,16G内存,关闭磁盘预读取功能,以近似模拟南宁学院虚拟化服务器实例的配置。
下面将根据领域的不同,对各个编程语言进行各项所需性能的测试。
2.1底层应用领域的性能测试
底层应用的开发通常需要对系统进行大量的IO操作,因此下面将分别在固态硬盘与机械硬盘上对文件读写和文件夹遍历两方面,靠文本输出以模拟数据的使用,从而进行所涉及编程语言的执行效率比较。
2.1.1文件读写
测试前已在主硬盘(D盘)与副硬盘(E盘)根目录下分别创建一个名为io_test的文件夹,文件读写的测试目标在于对该文件夹内分别读写大、小体积文件的耗时对比,这里以常见的压缩分卷大小为1GB来划分对大、小体积文件的临界值,大文件以1GB为例,小文件以227MB为例进行测试。
C语言测试时主要使用的包有:stdio.h和stdlib.h, API函数、类有:FILE、fopen()、fwrite()、strlen()、fclose()、fseek()等。
C++测试时主要使用的包有:stdlib.h、string、iostream、fstream,API函数、类有:ofstream、ios、if-stream、string、getline()等。
在其他硬件环境相同的条件下,通过控制台打印以模拟对数据的使用,测试100次后取平均值,得到在固态硬盘和机械硬盘上如表3所示的写入大文件(大写)、写入小文件(小写),读取大文件(大读)和读取小文件(小读)的耗时情况记录表。
表3文件读写耗时情况表(单位:秒)
语言
主固态硬盘环境副机械硬盘环境
大写小写大读小读大写小写大读小读C12.371 1.29115.647 2.33114.237 1.87215.864 2.533 C++13.882 2.41215.846 2.85115.936 2.62115.981 3.012 2.1.2文件夹遍历
测试前将以60074741723字节大小、103576个文件、17835个文件夹、最高目录深度为19层的文件夹分别拷贝至主硬盘(D盘)和副硬盘(E盘)的测试文件夹内,文件夹遍历的测试目标在于编程语言原生API 对文件夹遍历的耗时对比。
C语言测试时主要使用的包有:dirent.h,API
函
数、类有:DIR、dirent、opendir。、memset()、readdir()、strcmp()等。
C++测试时主要使用的包有:iostream、io.h、string、string.h,API函数、类有:_finddata_t、_findfirs
t、str-cmp()、_A_SUBDIR、_findnext、_findclose等。
在其他硬件环境相同的条件下,通过控制台打印以模拟对数据的使用,测试100次后取平均值,得到在固态硬盘和机械硬盘上如表4所示的硬盘遍历的耗时表。
表4硬盘遍历耗时情况表(单位:秒)语言主固态硬盘环境副机械硬盘环境
C19.92320.733
编程语言翻译C++74.33276.659
2.2跨平台应用领域的性能测试
跨平台应用的开发通常都是在保证代码在各平台下的通用性的基础上进行,其实现的原理是在对应平台环境中采用不同的方法封装了能够一致调用的API,在编译、执行时判断目标环境以调用正确的底层方法,这会带来相同的源码在不同平台环境下执行效率的区别,因此下面将各语言在数据批处理和Web服务处理两方面以相同源码执行在Windows10LTSC2019、Cen-tOS8.3.2011、Ubuntu20.04.2.0上的耗时对比。
2.2.1数据预处理
测试时准备一个文件大小为6010838字节的电子书文档,待测试语言通过递归算法分别在固态硬盘与机械硬盘环境下统计出文档内所有文字的词频。
C语言测试时主要使用的包有:stdio.h和stdlib.h, API函数、类有:FILE、fopen()、fwrite()、strlen()、fclose()、fseek()等。
C++语言测试时主要使用的包有:stdlib.h、string、iostream、fstream,API函数、类有:ofstream、ios、if-stream、string、getline()等。
Java语言测试时主要使用的包有:BufferedInput-Stream和FileInputStream,API函数、类有:Base64、FileInputStream、BufferedInputStream等。
C#语言测试时主要使用的包有:System.IO,API 函数、类有:StreamReader、StreamWriter等。
JavaScript语言测试时主要使用的包有:fs,API函数、类有:readFile、writeFile等。
在其他硬件环境相同的条件下,通过控制台打印以模拟对数据的使用,以相同源码执行测试100次后取平均值,得到在固态硬盘和机械硬盘上如表5所示的数据预处理耗时表。
表5数据预处理耗时情况表(单位:毫秒)语言
主固态硬盘环境副机械硬盘环境
Win10CentOS Ubuntu Win10CentOS Ubuntu C891824817893821823
C++228320462025230220582029 Java521353225106522352195296 C#584356885542579255325597 JavaScript712361576243719860265937 2.2.2WebSocket处理测试
测试前通过所选语言原生支持的WebSocket(无数据库操作的本地文件读取操作)进行监听,返回固定格式数据,以相同功能执行50次10线程的POSTMAN压力测试,得到在固态硬盘和机械硬盘上部署的如表6所示的WebSocket处理响应时间平均值。
表6WebSocket处理响应时间(单位:毫秒)语言
主固态硬盘环境副机械硬盘环境
Win10CentOS Ubuntu Win10CentOS Ubuntu C282221312625
C++362526402827
Java584443594342
C#646262686362 JavaScript666361676263 2.3嵌入式开发领域的性能测试
嵌入式开发领域通常需要在较小的程序体积基础上完成更多的功能,因此需要对编程语言的数据结构查询和多线程能力进行比较,这里选择在Raspberry Pi4B 8G版的环境下进行测试,测试内容为:在内存中构建10000条初始数据,尽可能开放更多线程进行处理,记录耗时情况。
C语言测试时主要使用的包有:stdio.h、stdlib.h、unistd.h,API函数、类有:bsearch、qsort、exec等。
C++语言测试时主要使用的包有:stdioh、stdlib.h、algorithm,API函数、类有:binary_search、sort、exec等。
Python语言测试时主要使用的包有:threading、time,API函数、类有:run、join、start等。
在其他硬件环境相同的条件下,通过控制台打印以模拟对数据的使用,执行测试100次后取平均值,得到在固态硬盘上如表7所示的结果表
。
软件研发与应用SOFTWARE DEVELOPMENT&APPLICATION
表7嵌入式开发领域性能对比表
语言多线程任务耗时(单位:秒)线程数量
C8.7234
C++8.9424
PyLhon23.7714
2.4Web后端领域的性能测试
Web后端的开发通常需要使用一些市场占有率较高的框架进行开发,并且在性能上需要尽可能支持大
量网络并发,因此这里选择在CentOS8.3.2011上分别部署Apache、Tomcat提供服务,其中Java使用Spring-Boot2.4.4,Python使用Django3.1.7,C#使用ASP.NET Core Web3.1,JavaScript使用express4.16.4,PHP使用CodeIgniter4.0.3进行典型Web后端框架性能对比的选型,测试内容为使用对应的框架搭建Web服务器,提供页面访问以查询MySQL数据库中基础内容,执行50次10线程的Apache JMeter压力测试,分别记录POST API与GET页面渲染的耗时情况,得到在机械硬盘上如表8所示的结果表。
表8Web后端查询并发性能表
语言API响应时间(单位:毫秒)页面渲染响应时间(单位:毫秒)Java67.3261.56
PyLhon194.21148.42
C#134.8198.16
JavaScripL76.4350.64
PHP75.2245.13
2.5数据处理领域的性能测试
数据处理领域的开发过程中通常都需要很高的执行效率以节省数据处理过程所消耗的时间,因此这里选择开发过程中常用的二分查、冒泡排序、快速排序和递归的实现方法按顺序进行性能测试,执行测试100次后取平均值,得到如表9所示的结果表。
表9数据处理领域性能对比表
语言任务耗时(单位:毫秒)数据深度
PyLhon29810
MATLAB81410对批量数据结构进行计算的操作,结合记录耗时的方式 测试两种语言的执行效率。在其他硬件环境相同的条件 下,通过控制台打印以模拟对数据的使用,执行测试100次后取平均值,得到在机械硬盘上如表10所示的结果表。
表10人工智能领域性能对比表
语言任务耗时(单位:毫秒)PyLhon(TensorFlow)1348
JavaScripL(TensorFlow)729
3结语
经过大量实验的数据对比,就单从性能而言,编译型语言中C\C++仍旧具备高效的执行效率,非编译型语言中JavaScript也具备了局部性能接近编译型语言的执行效率,但正如专业人做专业事一样,不同的编程语言具备不同方面的资源库生态圈,大量的资源库势必会给开发人员带来更便捷和快速的开发体验,这在Python 中得以体现,其生态圈因人工智能和大数据的普及而逐年上升使用排名,因此编程语言的执行效率虽重要但还是需要根据具体业务和项目做出适当的妥协,以达到开发成本与实际效果的最佳配比。
参考文献
[1]高远,王建强.基于Java虚拟机内存模型的性能调
优方法[J].指挥信息系统与技术,2020,11(06):96-100.
[2]陈雪.C++程序设计中的时间性能优化[J].电子
技术与软件工程,2019,(23):232-233.
[3]Andri Sunardi,Suharjito.MVC Architecture:A Compar
ative Study Between Laravel Framework and Slim Framework in Freelancer Project Monitoring System Web Based[J].Procedia Computer Science,2019,157.
[4]王舒心,贺细平.C语言程序中循环结构的性能优
化[J].电脑与信息技术,2019,27(05):67-69.
2.6人工智能领域的性能测试
人工智能的开发通常需要高效的算法运算效率以及大量相关库的支持和社区论坛的使用体交流,因此以人工智能领域中常用算法为例,
通过采用线性回归算法
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论