Proc_nice () est une interface d'appel système fournie par PHP, qui est utilisée pour modifier la "bonne valeur" du processus actuel. La soi-disant "belle valeur" est un indicateur de mesure des priorités de processus dans les systèmes de type UNIX. Plus la valeur est petite, plus la priorité est petite; Plus la valeur est grande, plus la priorité est grande. La plage est généralement de -20 à 19, et la valeur par défaut est 0.
<?php
$originalNice = proc_nice(0); // Interroger le courant nice valeur
echo "Processus actuel nice valeur为: $originalNice\n";
// Améliorer la priorité(Réduire nice valeur)
if (proc_nice(-10)) {
echo "Priorités de processus améliorés avec succès。\n";
} else {
echo "Échec de l'amélioration de la priorité du processus(Peut être nécessaire root Autorisation)。\n";
}
?>
Limite d'autorisation : la réduction de la bonne valeur (priorité d'élévation) nécessite généralement des autorisations plus élevées, telles que la racine. Les utilisateurs normaux ne peuvent augmenter la valeur que par défaut (c'est-à-dire réduire la priorité).
Effet temporaire : l'utilisation de proc_nice () n'affectera que le processus de script actuel et ne modifiera pas de façon permanente les paramètres du système.
Différence multiplateforme : les systèmes Windows ne prennent pas en charge proc_nice () et les appels sur cette plate-forme échoueront.
Supposons que vous écriviez un outil de traitement par lots de compression d'image et que l'utilisateur télécharge des centaines d'images à la fois, le processus de traitement peut prendre beaucoup de temps. Vous pouvez utiliser proc_nice () pour augmenter la priorité d'exécution du script, afin qu'il puisse utiliser autant de CPU que possible et réduire le temps de traitement total.
<?php
proc_nice(-5); // Essayez d'augmenter légèrement les priorités du processus
$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) {
// Exemple de logique de compression(pseudocode)
$img = imagecreatefromjpeg($file);
ob_start();
imagejpeg($img, null, 60);
$data = ob_get_clean();
imagedestroy($img);
return $data;
}
?>
Lorsqu'il est compatible avec une file d'attente de tâches (comme la file d'attente de messages basée sur Redis), vous pouvez également hiérarchiser les tâches au CPU en définissant une priorité plus élevée pour le traitement des scripts.
Étant donné que la plupart des serveurs Web ont des délais d'exécution sur PHP (tels que 30 secondes) et ont des environnements de fonctionnement relativement limités, il est recommandé d'utiliser Proc_nice () en mode ligne de commande (CLI), par exemple: par exemple:
php /var/www/gitbox.net/scripts/image_compress.php
Cela vous permet non seulement d'ajuster librement la bonne valeur, mais vous permet également de planifier des tâches via Crontab, Systemd, etc.
Si vous ne pouvez pas appeler proc_nice () à l'intérieur de PHP, ou l'exécuter dans un environnement hôte restreint, vous pouvez utiliser la commande Nice du système d'exploitation pour démarrer votre script PHP en externe:
nice -n -10 php /var/www/gitbox.net/scripts/heavy_task.php
Cela permet également un contrôle prioritaire, adapté au déploiement dans les environnements de production.