我是网络技术的新手,还处在学习曲线上。听说,fastcgi会将编译(解释)的PHP代码保存在内存中,那么为什么要使用php的操作码缓存(apc或eaccelerators)呢?但是我从来没有听说过任何这样的Python加速器。我希望python和php都是解释型语言,这让我想,python加速器应该有空间吧?如果我说错了,请纠正我。
非常感谢
发布于 2010-09-05 21:45:44
一旦PHP处理完该文件,它就会忘记即时编译。这意味着PHP每次需要从文件中获取内容时都必须重新编译该文件。一个OpCode缓存(就像你所说的绕过这一步,并将编译好的OpCode类保存在内存中一段预定的时间)。
另一方面,Python会在第一次运行时将代码编译成速度快得多的可解释代码。你可以看到项目周围的所有.pyc文件,它们等同于PHP的OpCode。
Python缓存通常捆绑了其他特性(内存驻留的数据存储),这些特性也是由OpCode提供的。
不过,Python有几个“加速器”。最值得注意的是Psyco,它声称在理想条件下速度可以提高2倍到100倍。但这是以极其沉重的内存成本为代价的,而且它只能在i386 archs上运行。
发布于 2010-09-05 21:45:20
与PHP不同,(C)Python在运行字节码后不会将其丢弃。当导入module.py并且没有module.pyc时,将对其进行字节码编译,并将结果复制到module.pyc;如果它已经存在,则跳过编译并使用现成的module.pyc。用户也可以手动对主脚本执行相同的操作。
至于
PHP fastcgi会将编译(解释)的
代码保存在内存中,那么为什么一定要为php使用操作码缓存(apc或eaccelerator)呢?
我从来没有想到过这一点- FastCGI不会为每个请求启动一个新的进程(与普通的旧CGI相反,它基本上是作为一个新进程启动解释器),但仅此而已。This benchmark显示,FastCGI的性能并不比mod_php (即嵌入到Apache进程中的解释器)好。
发布于 2010-09-05 21:39:27
Python在执行时被编译成字节码( .pyc文件),字节码被保留下来,而不是被丢弃。如果存在已编译的python,则使用它来代替源代码。因此,python中不需要额外的操作码缓存,因为它已经内置了。
https://stackoverflow.com/questions/3646205
复制相似问题