c - 提高并发进程的效率 - 设置 CPU 限制或其他?

标签 c process operating-system fork cpu

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

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

注意:系统是32位的Ubuntu 12.04。

提前致谢。

最佳答案

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

关于c - 提高并发进程的效率 - 设置 CPU 限制或其他?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17786742/

相关文章:

c - Windows 中的高级 C 编程(pthreads、信号和信号量,天哪!)

c# - 在 C# 中挂起主进程

java - 从 Java 执行命令时出现问题

linux - Endianness 是一种属性、硬件还是软件?

c - 为什么我通过重新排列术语的顺序得到不同的答案

linux - pid真的是唯一的吗

linux - 如何以及何时创建不同的内存映射?

比较 C 中的结构

c - 打印部分字符数组

c - 使用按位运算最多三个整数?