我有一个Web脚本,它是perl程序的简单包装器:
#!/bin/sh
source ~/.myinit // pull in some configurations like [PRIVATE_DIR]
exec [PRIVATE_DIR]/myprog.pl
这实际上只是为了使代码更好地划分区域,因为主程序(myprog.pl)在具有不同配置模式的不同机器上运行,并且更加清晰,无需为每次安装更新代码。但是,我愿意为了提高效率而牺牲清洁度。
所以问题是,这个额外的sh exec()调用是否会添加任何不可忽略的开销,考虑到它可能经常被网络服务器点击(我们一次有1000个用户)?我问,因为我知道人们已经竭尽全力将程序嵌入到httpd中以避免不得不进行额外的fork / exec调用。我的假设是,这是由于调用程序的开销(例如mod_perl绕过极慢的perl启动),而不是调用自身的过程。那会准确吗?
我试图对此进行基准测试,但我无法得到我需要的分辨率,看它是否有所作为。对此的任何建议也将受到赞赏。
谢谢!
答案 0 :(得分:0)
试一试吗?
假设您的测试环境与生产分开。
(这有点模糊,真正的测试人员将能够扩大如何改进这一点)
在紧密循环中运行您当前的2级设计,使用相同的参数为100,000?百万? ...
然后'修复'你的代码,以便直接调用perl,使用与上面相同的参数,循环相同的计数。
捕获两次运行的性能统计信息。两者之间的差异应该(大致)是额外呼叫的成本。
如果这样做,我会很高兴看到结果: - )
(标签=测试的帖子多于tag = benchmark)
我希望这会有所帮助。
P.S。因为您似乎是新用户,如果您得到的答案可以帮助您,请记住将其标记为已接受,或者给它一个+(或 - )作为有用的答案
答案 1 :(得分:0)
perl程序很容易从shell脚本中接管一些envars,请参阅Have perl execute shellscript & take over env vars的答案。 使用它,根本不需要exec,这可以减轻你对exec开销的所有担忧。 : - )