admin 管理员组

文章数量: 887239


2024年2月23日发(作者:oraclewin10)

实用第一f智慧密集■

BBaSEIEieSI3l3BBI3SeSBI3BBEIISBBBI3BI9@SI3eSI3aiSieEISeBI3ei3iaEIBBeBI3BaEIEII3SS@ieEl®基于特定领域的当下主流计算机编程语言选用分析罗亦言,江春(南宁学院,南宁530200)摘

要:随着信息时代的到来,“互联网+”与人们的生活早已融为一体,上至卫星火箭,下至生活用

品,无不是由工厂里的流水线生产出来,而流水线的运作依赖于各式各样的系统程序,这些系统程序

则是由开发人员使用不同的计算机编程语言实现的。如今,信息时代提供给人们庞大的信息来源,编

程语言的学习门槛也逐步降低,许多小学都开设了编程课程,而编程语言种类繁多,对于如何进行选

择仍是初学者迷惑的问题,因此通过对当下主流编程语言性能和用途方面的比较,提供一定的编程语

言选用参考。关键词:编程语言;语言性能;开发用途;语言选型;选用分析1

概述编程语言由1946年ENIAC所支持的机器语言,经

Jan

2021Jan

2020ChangePrograming

LanguageRaLingsChange-0.25%-0.41%787818JavaScripL2.20%历了汇编语言,到1956年世界上第一个被正式推广使

用的高级语言FORTRAN开始正式使用,经历了

60余

PHP1.99%1.90%1.84%1.64%1.61%1.43%1.41%1.30%1.15%1.02%1.00%910尹ff

ff

fR+

1.10%+

1.23%+0.76%+0.10%年的发展,至今的编程语言数目早已数不胜数,而编程

2315GroovyAssembly

language语言之所以种类繁多,主要的原因在于每种编程语言的

1112诞生大多是因为解决一个实际问题,之后由于在某些领

域具备了一定优势,从而得到强大的生命力,被更多的

开发人员所学习和使用。10SQL131415914引引SwifL-0.36%+0.51%+0.24%+0.41%+0.27%+0.07%0.79%Go112019引引ffRuby程序设计包含了分析、设计、编码、测试、排错等

16171819MATLABA多个阶段,由于计算机是无法识别任何除机器语言之外

的其他语言,因此,在通常情况下,源代码均需要将其

翻译成机器语言才能执行,这一过程具有两种不同的方

fPerlObjecLive-C131216引引引引引引Delphi/ObjecL

Pascal-0.20%0.79%式,其一是编译,其二是解释,其他阶段均有相同的做

法,

所以编程语言因翻译的过程不同而分为编译型语言

和解释型语言两种类型。20Classic

Visual

Basic-0.04%(数据来源:/tiobe-index/)TIOBE排行榜是基于世界范围内的自身软件工程师

编译型语言是指源代码需要经过编译生成中间文

件,之后经过链接库和其他文件等过程后,用可执行文

和第三方供应商的数据,按月更新榜单排行,意在反映

编程语言的热门程度,因此,根据表1的TIOBE社区

件的形式来运行程序。解释型语言是指源代码无需经过处理,

在程序需要

编程语言排行榜前

20

的榜单,

从中选取具有代表性的

10个编程语言,如表2所示,进行语言性能和用途方

运行时,通过语言环境逐行读取并执行。面的分析。Change表1

2021年1月TIOBE社区编程语言排行榜Jan

2021Jan

20202233ChangePrograming

LanguageRaLings基金项目:2019年南宁学院校级自然科学项目《基于

CJava17.38%11.96%11.72%+

1.61%-4.93%+2.01%大数据形式站群信息管理平台的设计与实现一以南宁

学院为例》(编号:2019XJ26)oPyLhonC++447.56%3.95%3.84%+

1.99%-1.40%-1.44%作者简介:罗亦言(1995-),男,本科,助理工程师,

研究方向:软件开发、网络安全;江春(1984-),男,

硕士,副教授,研究方向:软件开发、数据库技术。5656C#Visual

Basic

SOFTWARE

DEVELOPMENT

&

APPLICATION表2所选分析的编程语言及其相关信息表编程语言语言类型常用领域表单排行C编译型底层应用、跨平台应用、嵌人式开发1Java编译型Web后端、跨平台应用2Python解释型数据处理、人工智能、嵌人式开发、Web后端3C++编译型底层应用、跨平台应用、嵌人式开发4C#编译型Web

后端、

跨平台应用5JavaScript解释型Web

应用、

跨平台应用、

人工智能7PHP解释型Web

后端8SQL-数据库操作12Swift编译型IOS应用13MATLAB解释型数据处理、数学计算162环境与测试根据上述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-9900k

5.0GHZGPU:

ASUS

ROG-STRIX-RTX2080TI-A11G-GAM-

ING

1650MHZ

x1内存:Corsair

Vengeance

LPX

16G

3000MHZ

伊4

主板:

ASUS

ROG

Maximus

XII

Formula

操作系统:Microsoft

Windows

10

LTSC

2019

主硬盘:Samsung

PM981A

PCIE

NVME

1T

x1

副硬盘:Western

Digital

Caviar

Green

1TB

SATA3

64M

(WD10EZRX) x1同时,为进一步接近生产环境,该设备将会根据后

续测试所需,使用Hyper-V进行虚拟化,分配的Win­dows

10

LTSC

2019

x64

虚拟机、CentOS

8.3.2011

x64

软件研发与应用Ubuntu

20.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.3711.29115.6472.33114.2371.87215.8642.533C++13.8822.41215.8462.85115.9362.62115.9813.0122.1.2文件夹遍历测试前将以6字节大小、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、_findfirst、str-

cmp()、_A_SUBDIR、_findnext、_findclose

等。在其他硬件环境相同的条件下,通过控制台打印以

模拟对数据的使用,测试100次后取平均值,得到在固

态硬盘和机械硬盘上如表4所示的硬盘遍历的耗时表。表4硬盘遍历耗时情况表(单位:秒)语言主固态硬盘环境副机械硬盘环境C19.92320.733C++74.33276.6592.2跨平台应用领域的性能测试跨平台应用的开发通常都是在保证代码在各平台下

的通用性的基础上进行,

其实现的原理是在对应平台

环境中采用不同的方法封装了能够一致调用的API,在

编译、执行时判断目标环境以调用正确的底层方法,

这会带来相同的源码在不同平台环境下执行效率的区

别,因此下面将各语言在数据批处理和Web服务处理

两方面以相同源码执行在Windows

10

LTSC

2019、Cen-

tOS

8.3.2011、Ubuntu

20.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#语言测试时主要使用的包有:,

API

函数、

类有:

StreamReader、

StreamWriter

等。JavaScript语言测试时主要使用的包有:fs,

API函

数、

类有:

readFile、

writeFile

等。在其他硬件环境相同的条件下,

通过控制台打印以

模拟对数据的使用,以相同源码执行测试100次后取平

均值,得到在固态硬盘和机械硬盘上如表5所示的数据

预处理耗时表。表5数据预处理耗时情况表(单位:毫秒)主固态硬盘环境副机械硬盘环境语言Win10CentOSUbuntuWin10CentOSUbuntuC8921823C++228320582029Java521353225196C#584356885542579255325597JavaScript772.2.2

WebSocket

处理测试

测试前通过所选语言原生支持的

WebSocket

(无数

据库操作的本地文件读取操作)进行监听,返回固定格

式数据,以相同功能执行50次10线程的POSTMAN压

力测试,得到在固态硬盘和机械硬盘上部署的如表6所

示的

WebSocket

处理响应时间平均值。表6

WebSocket处理响应时间(单位:毫秒)主固态硬盘环境副机械硬盘环境语言Win10CentOSUbuntuWin10CentOSUbuntuC282221312625C++362526402827Java584443594342C#646262686362JavaScript6663616762632.3嵌入式开发领域的性能测试嵌入式开发领域通常需要在较小的程序体积基础上

完成更多的功能,

因此需要对编程语言的数据结构查询

和多线程能力进行比较,这里选择在Raspberry

Pi

4B

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.7234C++8.9424PyLhon23.77142.4

Web后端领域的性能测试Web后端的开发通常需要使用一些市场占有率较

高的框架进行开发,

并且在性能上需要尽可能支持大量

网络并发,因此这里选择在CentOS

8.3.2011上分别部

署Apache、Tomcat提供服务,其中Java使用Spring-

Boot2.4.4,

Python

使用

Django3.1.7,

C#

使用

Core

Web3.1,

JavaScript

使用

express4.16.4,

PHP

使用

CodeIgniter4.0.3进行典型Web后端框架性能对比的选

型,测试内容为使用对应的框架搭建Web服务器,提

供页面访问以查询MySQL数据库中基础内容,执行50

次10线程的Apache

JMeter压力测试,分别记录POST

API与GET页面渲染的耗时情况,得到在机械硬盘上如

表8所示的结果表。表8

Web后端查询并发性能表语言API响应时间(单位:毫秒)页面渲染响应时间(单位:毫秒)Java67.3261.56PyLhon194.21148.42C#134.8198.16JavaScripL76.4350.64PHP75.2245.132.5数据处理领域的性能测试数据处理领域的开发过程中通常都需要很高的执行

效率以节省数据处理过程所消耗的时间,

因此这里选择

开发过程中常用的二分查找、冒泡排序、快速排序和递

归的实现方法按顺序进行性能测试,执行测试100次后

取平均值,得到如表9所示的结果表。表9数据处理领域性能对比表语言任务耗时(单位:毫秒)数据深度PyLhon29810MATLAB814102.6人工智能领域的性能测试人工智能的开发通常需要高效的算法运算效率以及

大量相关库的支持和社区论坛的使用群体交流,因此以

人工智能领域中常用算法为例,

通过采用线性回归算法软件研发与应用对批量数据结构进行计算的操作,结合记录耗时的方式

测试两种语言的执行效率。在其他硬件环境相同的条件

下,通过控制台打印以模拟对数据的使用,执行测试

100次后取平均值,得到在机械硬盘上如表10所示的

结果表。表10人工智能领域性能对比表语言任务耗时

(单位:

毫秒)PyLhon

(TensorFlow)1348JavaScripL

(TensorFlow)7293结语经过大量实验的数据对比,就单从性能而言,编译

型语言中CC++仍旧具备高效的执行效率,非编译型语

言中

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.


本文标签: 测试 语言 使用 编程语言 性能