我正在编写一个基于PHP的网站,其中一项任务涉及接受包含用户发送的图像的zip文件,解压缩并为每个解压缩的图像创建缩略图。因为使用PHP动态执行此操作会非常痛苦(服务器机器很慢,并且PHP本身并不是最快的语言)我已经提出了使用C和ImageMagick来处理图像的解决方案。 PHP通过Unix套接字通知C程序,即将有新工作。 C程序本身有4个子进程,每个进程都是一个能够解压缩存档和处理图像的任务处理程序。然而,出现了一个问题:这个图像大小调整占用了很多CPU,系统就会冻结。即使一个程序实例消耗超过50%,如果有许多并发进程,系统也会变得无法响应。只有一个过程产生的系统负载是可以接受的,尽管整个系统效率非常低,因为一次只能处理一个任务;因此,我希望至少有三个并发进程。
现在我想问一个实际的问题:是否存在一种(并不过于复杂)的方式来设置流程对CPU使用的限制,还是应该尝试其他方法?如果我设法设置限制,它不会破坏并发点吗?也许我应该使用更高效的库? (虽然我认为ImageMagick不是一个糟糕的选择,是吗?)如果不是这样,你能提出哪些其他解决方案?
注意:系统是32位的Ubuntu 12.04。
提前致谢。
答案 0 :(得分:0)
我不认为为创建缩略图分叉新进程是明智的。我想一般使用PHP的ImageMagick函数会更便宜,而且速度也不会慢得多。你测试过了吗? 你使用convert命令的-thumbnail运算符吗?