gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:29:25 25 4
gpt4 key购买 nike

编写 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]", "[COMMAND]", "[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 被认为是糟糕的编程习惯?从理论上讲,它是否应该比在语言中使用特定的绑定(bind)/等效库慢得多?

最佳答案

执行 shell 命令不好的第一个原因是可维护性。在没有语言切换的情况下,任务之间的上下文切换已经够糟糕了。安全性也是一个考虑因素,但编码实践会降低它的重要性(避免注入(inject),...)

有几个因素会影响性能:

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

这些问题大多是在循环执行外部命令时出现的。可能很容易找到这些都不是问题的示例。

关于php - 从脚本语言中调用 shell 命令会降低性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15282614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com