【发布时间】:2013-07-22 11:45:17
【问题描述】:
我正在编写一个基于 PHP 的网站,其中一项任务涉及接受包含用户发送的图像的 zip 文件,解压缩它并为每个解压缩的图像创建缩略图。由于使用 PHP 即时执行此操作会非常痛苦(服务器机器很慢,而且 PHP 本身并不是最快的语言),我想出了一个使用 C 和 ImageMagick 来处理图像的解决方案。 PHP 通过 Unix Sockets 通知 C 程序有新工作即将到来。 C 程序本身有 4 个子进程,每个子进程都是能够解压缩存档和处理图像的任务处理程序。但是,出现了一个问题:此图像大小调整占用了太多 CPU,以至于系统实际上冻结了。即使是程序的一个实例也消耗超过 50%,如果有许多并发进程,系统就会变得无响应。仅由一个进程产生的系统负载是可以接受的,尽管整个系统变得非常低效,因为一次只能处理一个任务;因此我希望至少有三个并发进程。
现在我想问一个实际的问题:是否有一种(不太复杂)方法来设置进程对 CPU 使用的限制,或者我应该尝试其他方法吗?如果我设法设置限制,它不会破坏并发点吗?也许我应该使用更高效的库? (虽然我认为 ImageMagick 不是一个糟糕的选择,是吗?)如果不是这样,您还能建议什么其他解决方案?
注意:系统为 32 位 Ubuntu 12.04。
提前致谢。
【问题讨论】:
-
nice?
-
@DavidRF 谢谢,我试试看。
-
由于某种原因,它完全没有效果。我已经尝试从程序中更改 nice (nice(19)) 并使用指定的优先级从 shell 运行它(如 /usr/bin/nice -n 19 my_program)。仍在消耗过多的处理能力。
标签: c process operating-system fork cpu