我正在编写一个基于 PHP 的网站,其中一项任务涉及接受包含用户发送的图像的 zip 文件,将其解压缩并为每个解压缩的图像创建缩略图。由于使用 PHP 即时执行此操作会非常痛苦(服务器机器很慢,而且 PHP 本身并不是最快的语言),我想出了一个使用 C 和 ImageMagick 来处理图像的解决方案。PHP 通过 Unix Sockets 通知 C 程序有新工作即将到来。C 程序本身有 4 个子进程,每个子进程都是能够解压缩存档和处理图像的任务处理程序。但是,出现了一个问题:此图像大小调整占用了太多 CPU,以至于系统实际上冻结了。即使是程序的一个实例也消耗超过 50%,如果有许多并发进程,系统就会变得无响应。仅由一个进程产生的系统负载是可以接受的,尽管整个系统变得非常低效,因为一次只能处理一个任务;因此我希望至少有三个并发进程。
现在我想问一个实际的问题:是否有一种(不太复杂的)方法来限制进程的 CPU 使用率,或者我应该尝试其他方法吗?如果我设法设置限制,它不会破坏并发点吗?也许我应该使用更高效的库?(尽管我认为 ImageMagick 不是一个糟糕的选择,是吗?)如果不是这样,您还能建议什么其他解决方案?
注:系统为 32 位 Ubuntu 12.04。
提前致谢。