加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 从脚本语言中调用shell命令会降低性能吗?

发布时间:2020-12-13 18:09:56 所属栏目:PHP教程 来源:网络整理
导读:编写 python,perl,ruby或php时 我经常会用…… PERL:`[SHELL COMMAND HERE]`system("[SHELL]","[COMMAND]","[HERE]")Pythonimport osos.system("[SHELL COMMAND HERE]")from subprocess import callcall("[SHELL]","[HERE]")ruby `[SHELL COMMAND HERE]`syst
编写 python,perl,ruby或php时
我经常会用……
PERL:
`[SHELL COMMAND HERE]`
system("[SHELL]","[COMMAND]","[HERE]")

Python
import os
os.system("[SHELL COMMAND HERE]")
from subprocess import call
call("[SHELL]","[HERE]")

ruby 
`[SHELL COMMAND HERE]`
system("[SHELL COMMAND HERE]")

PHP
shell_exec ( "SHELL COMMAND HERE" )

在shell中生成子进程多少会降低程序的性能?
例如,我只是用perl和libcurl编写一个脚本,并且使用所有libcurl的参数很难让它工作.我停止使用libcurl并且刚开始使用curl并且性能似乎改进了,脚本变得更加容易,而且,我可以在只有基本perl(没有cpan模块)和安装基本shell实用程序的系统上运行我的脚本.

为什么产生这个子shell被认为是错误的编程习惯?从理论上讲,它应该比在语言中使用特定的绑定/等效库慢得多吗?

执行shell命令的第一个原因是可维护性.任务之间的上下文切换很糟糕,没有语言切换.安全性也是一个考虑因素,但编码实践会降低安全性(避免注射,……)

有几个因素会影响绩效:

>分叉一个进程:这需要一段时间,但是如果正在执行的代码运行良好,这就变得不那么重要了.
>优化变得不可能:当控件移交给另一个进程时,解释器或编译器无法执行任何优化.此外,您无法执行任何优化.
>阻止:Shell命令是阻塞操作.它们不会像代码的本机部分那样被安排.
>解析:如果需要对输出做些什么,则需要对其进行解析.在本机代码中,数据已经存在于相关的数据结构中.解析也容易出错.
>命令行生成:为可执行文件生成命令行可能需要迭代.有时,这比在本地执行相同操作需要更多周期.

当外部命令在循环中执行时,会出现大多数这些问题.可能很容易找到这些都不成问题的例子.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读