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

golang - Quels sont les scénarios d'utilisation de Yield pour implémenter des coroutines en PHP?

J'ai vu un article sur PHP utilisant des coroutines pour réaliser un multitâche coopératif. Il parlait de l'implémentation de coroutines via le rendement de PHP. Mais l’article était trop long et je ne l’ai pas terminé, alors je l’ai lu brièvement.

某草草某草草2639 Il y a quelques jours1527

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

  • PHP中文网

    PHP中文网2017-07-03 11:42:23

    Les coroutines peuvent être utilisées dans les E/S de réseau asynchrones pour les rendre non bloquantes.

    Par exemple, si vous êtes dans une requête http et que vous devez demander une interface externe, alors le scénario suivant se produira.

    Votre serveur frontal est nginx. nginx est non bloquant et asynchrone, mais php-fpm est synchrone et bloquant. Ensuite lorsque vous solliciterez l’interface externe, cette tâche sera bloquée. (Pour ajouter ici, le processus Worker de php-fpm est bloqué de manière synchrone)

    Supposons que vous utilisiez des coroutines, alors lorsque vous demandez l'interface, votre tâche peut être suspendue et le contexte enregistré. Ensuite, lorsque votre interface revient, relancez la tâche et poursuivez l'exécution. Votre processus n'a pas besoin de consacrer du temps à cette tâche et peut gérer d'autres requêtes http. Cela signifie-t-il que le degré de concurrence est élevé ?

    De même, lorsque votre requête interroge la base de données, il s'agit également d'une requête IO et est également synchrone. Les coroutines peuvent rendre votre programmation IO asynchrone et non bloquante, augmentant ainsi votre concurrence. Cela permet principalement à votre processeur de gérer d'autres choses en attendant les E/S. Toutes les requêtes IO peuvent le faire via des coroutines.

    J'ai lu votre article, c'est un très bon article. Ici, l'auteur utilise rendement pour mettre en œuvre un calendrier de tâches, qui consiste à faire les choses que j'ai mentionnées ci-dessus. Vous pouvez également consulter http://www.laruence.com/2015/... traduit par frère Niao, qui peut être considéré comme un complément à la traduction que vous avez vue. Il a implémenté un serveur asynchrone non bloquant via Yield, qui n'est bien sûr qu'une démo. Un exemple serait meilleur.

    répondre
    0
  • 仅有的幸福

    仅有的幸福2017-07-03 11:42:23

    Ce que j'ai rencontré jusqu'à présent, c'est que lorsque le modèle de framework Laravel utilise un curseur pour récupérer des données, le rendement est utilisé pour éviter le problème de mémoire insuffisante causé par la récupération de trop de données à la fois

    répondre
    0
  • 某草草

    某草草2017-07-03 11:42:23

    La chose la plus élémentaire est d'importer ou d'exporter une grande quantité de données pour exceller. En supposant que le processus d'exportation/exportation doive traiter les données, il peut être utilisé à ce moment-là.

    répondre
    0
  • Annulerrépondre