场景1: 我有一个包装Perl脚本,它使用另一个Perl模块并调用该模块中的一个函数。为什么我在使用system()调用Perl程序时看到延迟?
场景2: 现在我有相同的包装脚本,模块实现为Perl脚本。在这里,我不是简单地使用模块,而是调用system("perl anotherscript.pl")
。
两者都执行相同的功能,但在第二种情况下我看到一点点延迟。
这是为什么?它是预期还是与我的代码有关?
场景1: 我有一个包装Perl脚本,它使用另一个Perl模块并调用该模块中的一个函数。为什么我在使用system()调用Perl程序时看到延迟?
场景2: 现在我有相同的包装脚本,模块实现为Perl脚本。在这里,我不是简单地使用模块,而是调用system("perl anotherscript.pl")
。
两者都执行相同的功能,但在第二种情况下我看到一点点延迟。
这是为什么?它是预期还是与我的代码有关?
在第一种情况下,您有Perl解释器的开销。在第二个,你有两个 perl解释器的开销。如果你想第二个办法,考虑do
功能的替代和很少使用的版本(见perldoc -f do
):
do './anotherscript.pl'
如果Perl解释器在设计的都好(很可能是),这将可能运行速度明显快于第二个例子,尽管我不知道它与第一个例子相比如何。如果你想效率,基准。编辑:如果你不关心两者之间的(可能不重要的)性能差异,我建议你只需使用一个模块。编辑:如果你不关心两者之间的性能差异(我可以推荐你使用模块)。它将使你的代码变得更加有用,因为虽然脚本只能被一次性重复使用,但模块可以根据需要随意重复使用。
通过创建modulinos,可以同时创建模块和脚本。
创建另一个进程(system()调用)相当昂贵。在第一种情况下,你做了一次,在第二种情况下(右?)。你可能在循环中调用system()吗? – Inshallah
我在这里使用任何循环..我只叫了一次.. – Anandan
我的意思是“在第一个场景中,你做了一次,在第二个两次”是你首先创建一个包装脚本的过程(例如从shell),然后通过调用system()创建第二个进程。 – Inshallah