我有一个 PHP 脚本,它 100% 加载 8 个 CPU 中的 1 个 CPU。我可以共享 CPU 资源以更快地运行 PHP 脚本吗?
现在,当我启动我的 PHP 脚本时,它会将 1 个 CPU 加载到 100%。但其他有 1-5% 的负载。因此,我的脚本执行了 40 秒。
我可以在所有处理器之间共享负载,还是这不可能?
首先:如果您的 CPU 受限40 秒,您可能需要重新考虑您的算法或编程语言。PHP 恕我直言,作为面向用户的 HTML/JSON/任何输出格式生成引擎,PHP 仍然做得最好。这就是为什么它建立在无共享架构上的原因:一个请求获得一个 CPU,计算并终止。您可以通过在多个 CPU 之间分配请求来将此架构扩展到多个 CPU。
也就是说,如果单个请求需要 40 秒才能完成,那么您可能会幸运地使用Worker threads,这将您需要分离您的主线程并且可以在您未充分利用的 CPU 上运行。但同样,这是一个复杂的规模之山 - 在开始这条路线之前要三思而后行。
一个可能比自己动手的线程管理更简单的替代方法是将工作分配给专用的工作进程。Gearman是一个众所周知的框架,可以帮助您解决这个问题。
您可以使用 APC 扩展http://www.php.net/manual/de/book.apc.php。并存储大数组等。如果我没记错的话,这将被存储到共享内存中,并且可以通过你的所有处理器访问。此外,由于这些变量等被缓存,php 不会再次编译它,这应该会提高您的 php 应用程序的性能。
这是我能想到的唯一想法。