15

首先 - 这并不是要成为一个“更好的、无知的非离子战争线程”……而是,我通常需要帮助来做出架构决策/论证以提交给我的老板。

跳过细节 - 我只是想知道并找到任何对 Shell 与 [在此处插入通用编程语言(解释)进行了一些性能比较的人的结果,例如 C# 或 Java ......

令人惊讶的是,我花了一些时间在谷歌上搜索这里没有找到任何这些数据。有没有人在不同的用例中做过这些比较?像在 XYX 循环中一样访问数据库,执行不同类型的 SQL(Oracle 首选项,但 MSSQL 会执行)查询,例如任何 CRUD 操作 - 也没有访问数据库,只是常规 50k 循环类型比较执行不同类型的计算,以及那种性质的东西?

特别是 - 现在,我需要比较从 shell 脚本访问 Oracle DB 与 C#(同样,任何解释的 GPPL 都可以,即使是更高级别的,如 Python)。但我还需要了解标准编程计算/指令/等...

在你问‘为什么不自己写一个快速测试?答案是:我的整个人生/职业生涯都是一名 Windows 开发人员,并且对 Shell 脚本的了解非常有限——更不用说整个 *nix 了……所以在这里向更有经验的人提问是非常有益,更不用说节省时间了,因为我们正处于接近永久的最后期限紧缩状态;)。

4

7 回答 7

10

曾几何时,ye olde The Great Computer Language Shootout 确实包含了一些 shell 脚本。

因此,从 2004年起,由Internet 档案馆提供-

请注意,shell 脚本没有用于许多测试的程序。

    Score Missing-Tests

Java 20     1

Perl 16     0

Python 16   0

gawk 12     6 

mawk 10     6 

bash 7      12  

注意shell 脚本有时可以小而快 :-)

“反转文件”

        CPU (sec)   Mem (KB)    Lines Code

bash    0.0670      1464        1

C gcc   0.0810    4064        59

Python  0.3869    13160       6
于 2010-12-21T18:45:50.950 回答
8

它高度依赖于脚本在做什么。我已经看到写得很糟糕的 shell 脚本通过简单的更改加速了 1、2 甚至 3 个数量级。

通常,shell 脚本只是一些运行通常编译为 C 或 C++ 的实用程序的胶合逻辑。如果是这种情况,可能没有太多可以做的事情来加快速度。如果繁重的工作是由一个编写得很糟糕的编译实用程序来完成的,那么它只是在快速地做很多浪费的努力。

也就是说,Python 或 Perl 将比 shell 脚本快得多,但 VM 或本机代码会更快。

由于您无法告诉我们任何细节,因此我们无法提供具体的帮助。

如果您想看一个简单的演示进行比较,请尝试我的纯 Bash 实现hexdump并将其与真实的东西进行比较:

$ time ./bash-hexdump /bin/bash > /dev/null
real    7m17.577s
user    7m2.570s
sys     0m14.745s
$ time hexdump -C /bin/bash > /dev/null
real    0m2.459s
user    0m2.260s
sys     0m0.176s

Bash 版本缓慢的主要原因之一是它逐个字符地读取文件,这是处理空字节所必需的(shell 不太擅长处理二进制数据),但主要原因是执行速度。这是我找到的 Python 脚本示例:

$ time ./hexdump.py /bin/bash > /dev/null
real    0m11.694s
user    0m11.605s
sys     0m0.040s
于 2010-12-20T19:40:04.077 回答
3

我只是很想知道并找到任何做过一些性能比较的人的结果......

这种比较的持久教训是,特定的细节很重要——很多。

不仅是任务的特定细节,而且(作为程序员,我们不应该知道这一点)shell 脚本是如何编写的特定细节。

那么,您能找到了解该 shell 语言并且可以检查 shell 脚本是否以有效方式编写的人吗?(如果将几行代码从 40 分钟缩短到 5 分钟,那不是很好吗?)

于 2010-12-21T19:07:57.307 回答
2

刚刚在我的系统上做了这个非常简单的基准测试,结果符合预期。

将 1 到 50,000 之间的所有整数相加,并在每一步输出答案

重击:3 秒 C:0.5 秒

于 2013-11-14T17:16:40.097 回答
1

虽然这不包括“Shell”(又名 sh/bash/ksh/powerscript)语言,但它是一个相对较大的“语言 [实现] 性能”列表——充满了一般性和警告。无论如何,有人可能会喜欢它。

http://benchmarksgame.alioth.debian.org/

于 2010-12-20T20:11:42.923 回答
1

如果您正在编写代码并且担心处理速度,那么您应该编写直接编译为汇编或为现代 VM 编译的代码。

但是……随着摩尔定律每 18 个月提高一次处理能力,我想知道:性能要求真的有必要吗?即使是解释代码在大多数现代系统上运行速度也非常快,而且随着时间的推移它只会变得更好。你真的需要编译代码给你的那种速度改进吗?

如果答案是否定的,那就写任何让你开心的东西。

于 2010-12-20T17:41:22.257 回答
0

如上所述,您将无法从 shell 执行 SQL 查询。由于 VM 因素,在 VM 上运行的语言将需要一些时间,否则差异应该可以忽略不计。

如果问题真的是把它从 40 分钟减少到 5 分钟,我会试着找出哪个部分占用了大部分时间。如果查询运行时间最长,那么切换语言对您没有多大帮助。

再次(问题中没有太多细节)我将首先查看系统的不同组件,看看哪个是瓶颈。

于 2010-12-20T20:22:18.213 回答