我维护一个定制的类似CMS的应用程序。
每当提交文档时,都会执行一些任务,这些任务可以大致分为以下几类:
类别1包括对与文档内容有关的各种MySQL表的更新。
类别2包括对存储在MySQL LONGTEXT字段中的HTML内容的解析,以执行一些自动锚标记转换。我怀疑此任务花费了大量计算时间。
类别3仅使用与文档相对应的几个字段就对基于MySQL的简单搜索索引进行了更新。
所有这些任务都需要完成,才能将文档提交视为已完成。
承载此应用程序的计算机具有双四核Xeon处理器(总共8个内核)。但是,无论何时提交文档,所有执行的PHP代码都被限制为在一个内核上运行的单个进程。
我的问题:
您使用什么方案(如果有)在多个CPU内核之间分配PHP / MySQL Web应用程序处理负载?我理想的解决方案基本上是产生几个进程,让它们在多个内核上并行执行,然后阻塞直到所有进程完成。
相关问题:
您最喜欢的PHP性能分析工具是什么?
PHP并非完全面向多线程:正如您已经注意到的,每个页面都由一个PHP进程提供服务-一次只做一件事,包括在数据库服务器上执行SQL查询时仅“等待”。
不幸的是,您无能为力:这就是PHP的工作方式。
不过,这里有一些想法:
因此,实际上,您服务器的8个核心将最终被使用;-)
而且,如果您认为自己的页面生成时间过长,则可能的解决方案是将计算结果分成两组:
对于第二点中的那种情况,因为您不需要立即完成这些事情……那么,就不要立即执行它们;-) 我经常使用的一种解决方案是某种排队机制:
对于其他一些操作,您只希望它们每隔X分钟运行一次-而且在这里cronjob也是理想的工具。