recherche

Maison  >  Questions et réponses  >  le corps du texte

Concurrence - Comment le plug-in nginx implémente-t-il des opérations chronophages de manière non bloquante ?

Description du problème :

nginx tout le monde sait que la raison de ses excellentes performances est basée sur sa base asynchrone et non bloquante. Par conséquent, lors du développement de plug-ins nginx pour gérer les requêtes réseau, vous devez vous rappeler d'effectuer certaines opérations fastidieuses de manière bloquante. Sinon, cela affectera sérieusement les performances de nginx...

Cette question se pose : Et si je souhaite effectuer des opérations chronophages dans le plugin ? Par exemple, interroger la base de données (la base de données ne prend pas en charge le protocole http, il existe un protocole spécial) ?

ps : je peux ouvrir un pool de threads et lancer ces opérations de blocage dans le pool, mais existe-t-il un moyen de suspendre le traitement des requêtes en cours dans la file d'attente des événements du framework nginx ? Lorsqu'un changement de statut est envoyé dans la fonction de rappel d'une opération de blocage, laisser nginx continuer à traiter la requête précédente ?

Merci

phpcn_u1582phpcn_u15822774 Il y a quelques jours485

répondre à tous(1)je répondrai

  • 迷茫

    迷茫2017-05-16 17:14:26

    La requête de base de données est essentiellement une communication réseau, tant que la lecture et l'écriture de votre socket ne sont pas bloquantes, il n'y aura aucun problème. C'est plus facile à dire qu'à faire. nginx lui-même dispose de mécanismes réutilisables pour implémenter diverses opérations non bloquantes sur http. Cependant, les communications telles que TCP peuvent ne pas être facilement disponibles. Vous devez l'écrire vous-même, ce qui me semble plus compliqué, et il doit également être intégré à nginx.

    répondre
    0
  • Annulerrépondre