我的大部分应用程序都是用PHP ((前端和后端)编写的。有一个部分太慢了,我需要重写它,可能不是用PHP。什么将为我提供以下内容:
我想用CPP重写这段代码作为PHP扩展,但我可能被这个解决方案所束缚,错过了一些更简单/更好的解决方案?
该算法在每次运行时对几MB的数据进行PorterStemmerAlgorithm。
发布于 2009-02-23 05:00:49
答案实际上取决于它是一个什么样的过程。
如果它是一个长时间运行的进程(至少几秒钟),那么用C++编写一个外部程序可能会非常容易。它不会像PHP扩展那样复杂,它的稳定性也不会影响PHP/apache。您可以通过管道、共享内存或类似的方式进行通信。
如果它是一个短时间运行的进程(以毫秒为单位),那么您很可能需要编写一个扩展。这将允许它被快速调用,几乎没有每次调用的开销。
PHP的另一种可能是自定义服务器,它监听Unix Domain套接字,并在请求信息时快速响应。那么您每次调用的开销基本上就是创建一个套接字(还不错)。服务器可以使用任何语言(c、c++、python、erlang等),而客户机可以是使用socket_*()函数的50行PHP类。
在做出这个决定之前,需要对许多信息进行评估。PHP通常不会显示速度减慢,直到您进入真正紧密的循环或数千次重复的函数调用。换句话说,HTTP请求的开销和网络延迟通常使PHP延迟变得微不足道(除非上述情况适用)
通过提交自定义PHP扩展,您可以显著增加维护它所需的知识基础(甚至在C++之上)。但是在必要的时候这是一个很好的选择,。
请随时更新您的问题,提供更多详细信息,我相信Stack Overflow将很乐意为您提供帮助。
发布于 2009-02-23 07:10:40
建议
PorterStemmerAlgorithm在http://tartarus.org/~martin/PorterStemmer/c.txt上提供了一个C实现
将此C程序绑定到您的数据源并使其成为独立的可执行文件应该是一件容易的事情。然后,您可以简单地使用一个proc函数从PHP调用它,比如proc_open()
除非您需要在每个php请求中多次调用此程序,否则这种方法应该可以省去构建和集成PHP扩展的工作,更不用说已经完成了繁重的工作(用c编写)。
发布于 2009-02-23 06:30:00
我不确定PorterStemmerAlgorithm是什么。但是,如果您可以使您的流程并行运行并收集信息,那么您可以查看在JAVA中轻松实现的并行运行流程。不确定如何在PHP中调用它,但绝对是可维护的。
你可以看看这个框架。看起来很容易实现
https://computefarm.dev.java.net/
你好,富兰克林。
https://stackoverflow.com/questions/576572
复制相似问题