[英]Performance Comparison of Shell Scripts vs high level interpreted langs (C#/Java/etc.)
首先 - 这并不意味着'这是一个更好,无知的非离子战争线'...而是,我通常需要帮助做出一个架构决定/论证提出给我的老板。
跳过细节 - 我只是很想知道并找到任何已经完成Shell与[插入通用编程语言(解释))性能比较的人的结果,例如C#或Java ......
令人惊讶的是,我花了一些时间在谷歌搜索这里找不到任何这些数据。 有没有人在不同的用例中做过这些比较; 点击一个数据库就像在一个XYX#循环中执行不同类型的SQL(Oracle pref,但MSSQL会这样做)查询,例如任何CRUD操作 - 并且也没有命中数据库而只是常规的50k循环类型比较进行不同类型的计算和那种性质的东西?
特别是 - 就目前而言,我需要比较从shell脚本命中Oracle DB,比如说C#(同样,任何被解释的GPPL都可以,甚至像Python这样的更高级别的GPPL)。 但我还需要了解标准编程计算/指令/等...
在你问'为什么不自己写一个快速测试之前? 答案是:我一直是Windows开发人员,我的整个生活/职业生涯,对Shell脚本的知识非常有限 - 更不用说* nix作为一个整体....所以从这里向更有经验的人询问问题将是因为我们处于接近普遍的最后期限紧缩状态,因此它是有益的,更不用说节省时间了;)。
它高度依赖于脚本正在做什么。 我已经看到写得不好的shell脚本通过简单的更改加速了一个,两个甚至三个数量级。
通常,shell脚本只是一些粘合逻辑,它运行通常编译为C或C ++的实用程序。 如果是这种情况,可能没有太多可以做的事情来加快速度。 如果咕噜咕噜的工作是由编写得很好的实用工具完成的,那么它只是在很快就浪费了很多精力。
也就是说,Python或Perl将比shell脚本快得多,但VM或本机代码会更快。
由于您无法告诉我们任何细节,我们无法提供具体的帮助。
如果你想看一个简单的比较演示,试试我的hexdump
pure-Bash实现并将它与真实的东西进行比较:
$ 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
我只是很想知道并找到任何已经做过一些性能比较的人的结果......
这种比较的持久教训是,特定的细节很重要 - 很多。
不仅是任务的特定细节,而且(我们不应该知道这是程序员)有关shell脚本编写方式的具体细节。
那么你能找到一个了解shell语言的人,并且可以检查shell脚本是否以有效的方式编写? (如果换几行可以从40分钟到5分钟,那会不会很好。)
虽然这不包括“Shell”(又名sh / bash / ksh / powerscript)语言,但它是一个相对较大的“语言[实现]性能”列表 - 充满了一般性和警告。 无论如何,有人可能喜欢它。
刚刚在我的系统上做了这个非常简单的基准测试,结果如预期的那样。
将所有1到50,000之间的整数相加,并在每一步输出答案
猛击:3秒C:0.5秒
如果您正在编写代码并且您对处理速度感到担忧,那么您应该编写直接编译为汇编或为现代VM编译的代码。
但是 ......根据摩尔定律每18个月提高处理能力,我想知道:性能要求是否真的有必要? 即使是解释代码在大多数现代系统上都运行得非常快,而且随着时间的推移它会变得更好。 你真的需要编译代码会给你的那种速度改进吗?
如果答案是否定的,那么写下任何让你开心的东西。
如上所述,您将无法从shell执行SQL查询。 由于VM因素,在VM上运行的语言将需要一些时间,否则差异应该可以忽略不计。
如果问题确实是将它从40分钟缩短到5分钟,那么我将试着找出大部分时间都在使用哪一块。 如果查询运行的时间最长,那么切换语言对您没有多大帮助。
再次(在问题中没有太多细节)我将开始研究系统的不同组件,看看哪个是瓶颈。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.