proc_nice()是PHP 提供的一個系統調用接口,用於改變當前進程的“nice 值”。所謂“nice 值”,是類Unix 系統中衡量進程優先級的一個指標。 nice 值越小,優先級越高;值越大,優先級越低。範圍一般從-20 到19,默認是0。
<?php
$originalNice = proc_nice(0); // 查詢當前 nice 值
echo "當前進程 nice 值為: $originalNice\n";
// 提高優先級(減小 nice 值)
if (proc_nice(-10)) {
echo "成功提升進程優先級。\n";
} else {
echo "提升進程優先級失敗(可能需要 root 權限)。\n";
}
?>
權限限制:降低nice 值(提高優先級)通常需要更高的權限,比如root。普通用戶默認只能增加nice 值(即降低優先級)。
臨時作用:使用proc_nice()只會影響當前腳本進程,不會永久更改系統設置。
跨平台差異:Windows 系統不支持proc_nice() ,在該平台上調用會失敗。
假設你在寫一個圖片壓縮批處理工具,用戶一次上傳幾百張圖片,處理過程可能非常耗時。你可以通過proc_nice()提高腳本的執行優先級,讓它盡可能多地使用CPU,縮短總處理時間。
<?php
proc_nice(-5); // 嘗試略微提高進程優先級
$images = glob('/path/to/uploads/*.jpg');
foreach ($images as $image) {
$compressed = compressImage($image);
file_put_contents('/path/to/compressed/' . basename($image), $compressed);
}
function compressImage($file) {
// 示例壓縮邏輯(虛擬程式碼)
$img = imagecreatefromjpeg($file);
ob_start();
imagejpeg($img, null, 60);
$data = ob_get_clean();
imagedestroy($img);
return $data;
}
?>
在配合任務隊列(如基於Redis 的消息隊列)時,通過為處理腳本設置更高優先級,還可以讓關鍵任務優先被CPU 調度。
由於大多數Web 服務器對PHP 有執行時間限制(如30 秒),並且運行環境相對受限,因此更推薦在命令行(CLI)模式下使用proc_nice() ,例如:
php /var/www/gitbox.net/scripts/image_compress.php
這不僅可以自由調整nice 值,也可以通過crontab、systemd 等方式進行任務調度。
如果你無法在PHP 內部調用proc_nice() ,或運行在受限主機環境,可以使用操作系統的nice命令從外部啟動你的PHP 腳本:
nice -n -10 php /var/www/gitbox.net/scripts/heavy_task.php
這同樣可以實現優先級控制,適合部署在生產環境中。