2

我正在编写一个基于 PHP 的网站,其中一项任务涉及接受包含用户发送的图像的 zip 文件,将其解压缩并为每个解压缩的图像创建缩略图。由于使用 PHP 即时执行此操作会非常痛苦(服务器机器很慢,而且 PHP 本身并不是最快的语言),我想出了一个使用 C 和 ImageMagick 来处理图像的解决方案。PHP 通过 Unix Sockets 通知 C 程序有新工作即将到来。C 程序本身有 4 个子进程,每个子进程都是能够解压缩存档和处理图像的任务处理程序。但是,出现了一个问题:此图像大小调整占用了太多 CPU,以至于系统实际上冻结了。即使是程序的一个实例也消耗超过 50%,如果有许多并发进程,系统就会变得无响应。仅由一个进程产生的系统负载是可以接受的,尽管整个系统变得非常低效,因为一次只能处理一个任务;因此我希望至少有三个并发进程。

现在我想问一个实际的问题:是否有一种(不太复杂的)方法来限制进程的 CPU 使用率,或者我应该尝试其他方法吗?如果我设法设置限制,它不会破坏并发点吗?也许我应该使用更高效的库?(尽管我认为 ImageMagick 不是一个糟糕的选择,是吗?)如果不是这样,您还能建议什么其他解决方案?

注:系统为 32 位 Ubuntu 12.04。

提前致谢。

4

1 回答 1

0

我认为创建缩略图的新流程是不明智的。我想一般来说使用 PHP 的 ImageMagick 函数会更便宜,而且速度不会明显变慢。你测试过吗?您是否使用转换命令的 -thumbnail 运算符?

于 2013-07-22T12:02:53.527 回答