Maison développement back-end tutoriel php Comparez les différences entre les verrous de fichiers et les verrous de processus en PHP

Comparez les différences entre les verrous de fichiers et les verrous de processus en PHP

Aug 15, 2017 am 11:12 AM
php 使用 区别

Cet article présente principalement les exemples d'utilisation du verrouillage de fichier PHP et du verrouillage de processus. L'éditeur pense que c'est assez bon, je vais donc le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur pour y jeter un œil.

Compte tenu de l'introduction de swoole auparavant, utilisons le mécanisme serveur/client et multi-processus de swoole pour expliquer le verrouillage.

Ceci est uniquement pour PHP. Le mécanisme de verrouillage sera expliqué. Étant donné que les verrous SQL sont différents de leurs modes d'action et de leurs scénarios d'application, ils seront expliqués séparément

1. >

  • flock()

  • fclose()

  • swoole_lock()

Les scénarios d'application possibles des verrouillages de fichiers sont :

1. Limiter plusieurs processus simultanés ou plusieurs serveurs qui doivent accéder et modifier le même fichier ;

2. Fichiers participants I Traiter la file d'attente et le blocage artificiel de /O ;

3. Protéger le contenu du fichier dans la logique métier ;

Ce qui suit est le fichier lock C/S mécanisme de communication Le processus de communication spécifique a été omis pour l'utilisation de ):

Client2 (le processus de communication du serveur est omis):


//监听数据发送事件
$serv->on('receive', function ($serv, $fd, $from_id, $data) {
  $serv->send($fd, "ServerEnd");

  $p_file = "locktest.txt";
  var_dump(file_get_contents($p_file));
});
Copier après la connexion

Résultat :


Le Client2 a été bloqué pendant 30 secondes et le fichier n'a été écrit qu'une seule fois jusqu'à la fin de l'exécution de Client1
$s_recv = "ww";

$p_file = "locktest.txt";

$o_file = fopen($p_file,'w+');
// flock()加锁方式:
flock($o_file,LOCK_EX);

// // swoole加锁方式:
// $lock = new swoole_lock(SWOOLE_FILELOCK, $p_file);
// $lock->lock();

fwrite($o_file, 'ss' . $s_recv);

sleep(30);
// 两种解锁方式
// flock($o_file, LOCK_UN);
// $lock->unlock();
Copier après la connexion
< ; 🎜>


Il est à noter que :

$s_recv = "xx";

$p_file = "locktest.txt";

$o_file = fopen($p_file,&#39;w+&#39;);
// flock()加锁方式:
flock($o_file,LOCK_EX);

// // swoole加锁方式:
// $lock = new swoole_lock(SWOOLE_FILELOCK, $p_file);
// $lock->lock();


fwrite($o_file, &#39;ss&#39; . $s_recv);

// 两种解锁方式
// flock($o_file, LOCK_UN);
// $lock->unlock();
Copier après la connexion
1. Qu'il s'agisse de flock() ou de swoole_lock() fournis par swoole, il existe un mécanisme pour se déverrouiller automatiquement lorsque le processus se termine, il peut donc fonctionner normalement même sans déverrouillage manuel dans la démo, voici donc le chapitre Un client exécute la fonction de pause sleep() pour observer l'effet du verrouillage du fichier


2. La méthode de publication standard de flock() est flock($file, LOCK_UN);, mais personnellement, j'aime fclose (), ne provoque jamais de problèmes futurs


2.
[l0.16@4 m29.5% c30s04] $ php swoole_client2.php
Copier après la connexion

À la différence du verrouillage de fichiers, le verrouillage de processus n'est pas utilisé pour empêcher les E/S sur les fichiers, il est utilisé pour éviter les conséquences inattendues causées par la concurrence multi-processus. Par conséquent, il est nécessaire de mettre plusieurs files d'attente en file d'attente. processus lorsqu'ils sont simultanés, c'est-à-dire bloquer d'autres processus simultanés avant la fin de l'exécution logique clé d'un processus

Il existe plusieurs idées d'implémentation :

. 1. Utilisez le verrouillage de fichier flock() pour créer un fichier de verrouillage temporaire et utilisez LOCK_NB pour simuler un flux bloquant ou non bloquant, puis utilisez des conditions de jugement pour contrôler l'exécution de la logique à l'intérieur du processus Modèle non bloquant ; démo :

2. Utilisez la mémoire partagée fournie par swoole , la méthode de cache ou la méthode de communication transfère une variable globale dans différents processus une fois que le processus a obtenu le statut. de la variable, il utilise des conditions de jugement pour contrôler l'exécution de la logique ; Il existe de nombreuses façons de transférer des variables. Voici une seule idée, qui est memcached à titre d'exemple ; démo du modèle :


Ce qu'il faut noter ici est :

$p_file = "locktest.txt";
$o_file = fopen($p_file, &#39;w+&#39;);

// 如果临时文件被锁定,这里的flock()将返回false
if (!flock($o_file, LOCK_EX + LOCK_NB)) {
  var_dump(&#39;Process Locked&#39;);
}
else {
  // 非阻塞模型必须在flock()中增加LOCK_NB参数
  // 当然,这里取消LOCK_NB参数就是阻塞模型了
  flock($o_file, LOCK_EX + LOCK_NB);
  var_dump(&#39;Process Locking&#39;);
  // 模拟长时间的执行操作
  sleep(10);
}
Copier après la connexion

1. memcached ne peut pas être inférieur à la durée réelle d'exécution du programme, il est donc recommandé d'être légèrement plus long et de recycler une fois l'exécution logique terminée


2. est jugé faux, le processus doit être terminé ou bloqué pour éviter la poursuite de l'exécution de la logique métier

3. Dans les applications pratiques, il est nécessaire de définir un délai de nouvelle tentative, qui peut être défini. très pratique Réduisez dans une large mesure une grande quantité de concurrence d'E/S pour memcached et réduisez la pression du serveur
;

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PHP et Python: comparaison de deux langages de programmation populaires PHP et Python: comparaison de deux langages de programmation populaires Apr 14, 2025 am 12:13 AM

PHP et Python ont chacun leurs propres avantages et choisissent en fonction des exigences du projet. 1.Php convient au développement Web, en particulier pour le développement rapide et la maintenance des sites Web. 2. Python convient à la science des données, à l'apprentissage automatique et à l'intelligence artificielle, avec syntaxe concise et adaptée aux débutants.

L'avenir de PHP: adaptations et innovations L'avenir de PHP: adaptations et innovations Apr 11, 2025 am 12:01 AM

L'avenir de PHP sera réalisé en s'adaptant aux nouvelles tendances technologiques et en introduisant des fonctionnalités innovantes: 1) s'adapter aux architectures de cloud computing, de conteneurisation et de microservice, en prenant en charge Docker et Kubernetes; 2) introduire des compilateurs JIT et des types d'énumération pour améliorer l'efficacité des performances et du traitement des données; 3) Optimiser en continu les performances et promouvoir les meilleures pratiques.

PHP vs Python: comprendre les différences PHP vs Python: comprendre les différences Apr 11, 2025 am 12:15 AM

PHP et Python ont chacun leurs propres avantages, et le choix doit être basé sur les exigences du projet. 1.Php convient au développement Web, avec une syntaxe simple et une efficacité d'exécution élevée. 2. Python convient à la science des données et à l'apprentissage automatique, avec une syntaxe concise et des bibliothèques riches.

PHP: un langage clé pour le développement Web PHP: un langage clé pour le développement Web Apr 13, 2025 am 12:08 AM

PHP est un langage de script largement utilisé du côté du serveur, particulièrement adapté au développement Web. 1.Php peut intégrer HTML, traiter les demandes et réponses HTTP et prend en charge une variété de bases de données. 2.PHP est utilisé pour générer du contenu Web dynamique, des données de formulaire de traitement, des bases de données d'accès, etc., avec un support communautaire solide et des ressources open source. 3. PHP est une langue interprétée, et le processus d'exécution comprend l'analyse lexicale, l'analyse grammaticale, la compilation et l'exécution. 4.PHP peut être combiné avec MySQL pour les applications avancées telles que les systèmes d'enregistrement des utilisateurs. 5. Lors du débogage de PHP, vous pouvez utiliser des fonctions telles que error_reportting () et var_dump (). 6. Optimiser le code PHP pour utiliser les mécanismes de mise en cache, optimiser les requêtes de base de données et utiliser des fonctions intégrées. 7

Statut actuel de PHP: un regard sur les tendances de développement Web Statut actuel de PHP: un regard sur les tendances de développement Web Apr 13, 2025 am 12:20 AM

Le PHP reste important dans le développement Web moderne, en particulier dans la gestion de contenu et les plateformes de commerce électronique. 1) PHP a un écosystème riche et un fort soutien-cadre, tels que Laravel et Symfony. 2) L'optimisation des performances peut être obtenue via Opcache et Nginx. 3) PHP8.0 introduit le compilateur JIT pour améliorer les performances. 4) Les applications natives dans le cloud sont déployées via Docker et Kubernetes pour améliorer la flexibilité et l'évolutivité.

PHP vs autres langues: une comparaison PHP vs autres langues: une comparaison Apr 13, 2025 am 12:19 AM

PHP convient au développement Web, en particulier dans le développement rapide et le traitement du contenu dynamique, mais n'est pas bon dans les applications de la science des données et de l'entreprise. Par rapport à Python, PHP présente plus d'avantages dans le développement Web, mais n'est pas aussi bon que Python dans le domaine de la science des données; Par rapport à Java, PHP fonctionne moins bien dans les applications au niveau de l'entreprise, mais est plus flexible dans le développement Web; Par rapport à JavaScript, PHP est plus concis dans le développement back-end, mais n'est pas aussi bon que JavaScript dans le développement frontal.

La pertinence durable de PHP: est-elle toujours vivante? La pertinence durable de PHP: est-elle toujours vivante? Apr 14, 2025 am 12:12 AM

PHP est toujours dynamique et occupe toujours une position importante dans le domaine de la programmation moderne. 1) La simplicité de PHP et le soutien communautaire puissant le rendent largement utilisé dans le développement Web; 2) sa flexibilité et sa stabilité le rendent exceptionnelle dans la gestion des formulaires Web, des opérations de base de données et du traitement de fichiers; 3) PHP évolue et optimise constamment, adapté aux débutants et aux développeurs expérimentés.

Objectif de PHP: Construire des sites Web dynamiques Objectif de PHP: Construire des sites Web dynamiques Apr 15, 2025 am 12:18 AM

PHP est utilisé pour créer des sites Web dynamiques, et ses fonctions principales incluent: 1. Générer du contenu dynamique et générer des pages Web en temps réel en se connectant à la base de données; 2. Traiter l'interaction utilisateur et les soumissions de formulaires, vérifier les entrées et répondre aux opérations; 3. Gérer les sessions et l'authentification des utilisateurs pour offrir une expérience personnalisée; 4. Optimiser les performances et suivre les meilleures pratiques pour améliorer l'efficacité et la sécurité du site Web.

See all articles