我是网络技术的新手,仍处于学习曲线上。 听说,fastcgi会将编译好的(解释的)php代码保存在内存中,那为什么要为PHP使用操作码缓存(apc或eaccelerators)呢? 但我从来没有听说过任何这样的Python加速器。我希望python和php都是解释语言,它让我觉得,python加速器必须有空间吗?如果我错了,请纠正我。
非常感谢
答案 0 :(得分:2)
与PHP不同,(C)Python在运行后不会丢弃字节码。当导入module.py并且没有module.pyc时,它是字节码编译的,结果被复制到module.pyc;它已经存在,跳过编译并使用现成的module.pyc。也可以手动对主脚本执行相同的操作。
至于
fastcgi会将已编译(解释)的php代码保留在内存中,那么为什么必须为PHP使用操作码缓存(apc或eaccelerators)?
我从不这样做--FastCGI没有为每个请求启动一个新进程(与普通的旧CGI相反,它开始基本上将解释器作为一个新进程启动),但就是这样。 This benchmark表明FastCGI的性能不如mod_php(即嵌入在Apache进程中的解释器)。
答案 1 :(得分:2)
PHP一旦完成该文件,就会忘记即时编译。这意味着PHP每次需要时都需要重新编译文件。一个OpCode缓存(就像你在谈论这个步骤并保持PHP类在内存中编译预定的时间)。
另一方面,Python在第一次运行时本地编译了更快的可解释代码。您可以看到项目周围的所有.pyc
个文件,它们等同于PHP的OpCode。
PHP OpCode缓存通常捆绑在其他功能(内存驻留数据存储)中,这些也是Python提供的开箱即用。
但是Python有一些“加速器”。最值得注意的是Psyco声称在理想条件下速度提高了“2x到100x”。但这是因为RAM的成本非常高,而且只能在i386拱门上运行。
答案 2 :(得分:0)
Python在执行时编译为字节码(.pyc文件),字节码保持不变,而不是丢弃。如果存在,则使用编译的python而不是源代码。因此,python中不需要额外的操作码缓存,因为它已经内置。