1. Exécutez chaque exemple : Ne vous contentez pas de lire le code. Tapez-le, exécutez-le et observez le comportement.⚠️ Comment s'y prendre pour cette série ?
2. Expérimentez et cassez des choses : Supprimez les mises en veille et voyez ce qui se passe, modifiez la taille des tampons de canal, modifiez le nombre de goroutines.
Casser des choses vous apprend comment elles fonctionnent
3. Raison concernant le comportement : Avant d'exécuter du code modifié, essayez de prédire le résultat. Lorsque vous constatez un comportement inattendu, faites une pause et réfléchissez à pourquoi. Contestez les explications.
4. Construire des modèles mentaux : Chaque visualisation représente un concept. Essayez de dessiner vos propres diagrammes pour le code modifié.
Dans notre article précédent, nous avons exploré le modèle de concurrence Pipeline, les éléments constitutifs des modèles de concurrence Fan-In et Fan-Out. Vous pouvez le lire ici :

Modèle de concurrence de pipeline dans Go : un guide visuel complet
Souvik Kar Mahapatra ・ 29 décembre 24
Dans cet article, nous aborderons le Modèle d'entrée et de sortie et essaierons de les visualiser. Alors préparons-nous car nous serons présents tout au long du processus.
Évolution à partir du modèle de pipeline
Le modèle fan-in-fan-out est une évolution naturelle du modèle pipeline. Alors qu'un pipeline traite les données de manière séquentielle à travers les étapes, le fan-in-fan-out introduit des capacités de traitement parallèle. Visualisons comment cette évolution se produit :
Modèle de répartition d'entrée et de sortie
Imaginez une cuisine de restaurant pendant les heures de pointe. Lorsque les commandes arrivent, plusieurs cuisiniers travaillent simultanément sur différents plats (fan-out). Au fur et à mesure qu'ils terminent les plats, ils se réunissent au comptoir de service (fan-in).
Comprendre la diffusion
Fan-out consiste à répartir le travail sur plusieurs goroutines pour traiter les données en parallèle. Pensez-y comme à diviser une tâche importante en morceaux plus petits sur lesquels vous pouvez travailler simultanément. Voici un exemple simple :
func fanOut(input <h3> Comprendre le fan-in </h3> <p>Fan-in est l'opposé du fan-out : il combine plusieurs canaux d'entrée en un seul canal. C'est comme un entonnoir qui rassemble les résultats de tous les travailleurs en un seul flux. Voici comment nous le mettons en œuvre :<br> </p> <pre class="brush:php;toolbar:false">func fanIn(inputs ... <p>Rassemblons tout cela avec un exemple complet qui traite les nombres en parallèle :<br> </p> <pre class="brush:php;toolbar:false">func main() { // Create our input channel input := make(chan int) // Start sending numbers go func() { defer close(input) for i := 1; i <h2> Pourquoi utiliser le modèle Fan-in-fan-out ? </h2> <p><strong>Utilisation optimale des ressources</strong></p> <p>Le modèle répartit naturellement le travail entre les ressources disponibles, ce qui évite les ressources inutilisées et maximise le débit.<br> </p> <pre class="brush:php;toolbar:false">// Worker pool size adapts to system resources numWorkers := runtime.NumCPU() if numWorkers > maxWorkers { numWorkers = maxWorkers // Prevent over-allocation }
Performances améliorées grâce à la parallélisation
- Dans l'approche séquentielle, les tâches sont traitées les unes après les autres, créant un temps d'exécution linéaire. Si chaque tâche prend 1 seconde, le traitement de 4 tâches prend 4 secondes.
- Ce traitement parallèle réduit le temps d'exécution total à environ (tâches totales / nombre de travailleurs) les frais généraux. Dans notre exemple, avec 4 travailleurs, nous traitons toutes les tâches en 1,2 seconde environ au lieu de 4 secondes.
func fanOut(tasks []Task) { numWorkers := runtime.NumCPU() // Utilize all available CPU cores workers := make([] <h2> Cas d'utilisation réels </h2> <p><strong>Pipeline de traitement d'Modèle de concurrence Fan-In Fan-Out dans Go : un guide complets</strong></p> <p>C'est comme une mise à niveau de notre article sur le modèle de pipeline, nous devons traiter plus rapidement et avoir des routines go dédiées pour chaque processus :</p><p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173625991579012.png?x-oss-process=image/resize,p_40" class="lazy" alt="Modèle de concurrence Fan-In Fan-Out dans Go : un guide complet processing pipeline with fan in and fan out pattern" loading="lazy" style="max-width:90%" style="max-width:90%"></p> <p><strong>Pipeline Web Scraper</strong><br> Le web scraping est un autre cas d’utilisation parfait pour le fan-in-fan-out.</p> <p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173625991836275.png?x-oss-process=image/resize,p_40" class="lazy" alt="Web scraping is another perfect use case for fan-in fan-out" loading="lazy" style="max-width:90%" style="max-width:90%"></p> <p>Le modèle fan-in-fan-out brille vraiment dans ces scénarios car il :</p>
- Gère automatiquement la simultanéité via les mécanismes de canal de Go
- Fournit une contre-pression naturelle lorsque le traitement est plus lent que l'ingestion
- Permet une mise à l'échelle facile en ajustant le nombre de travailleurs
- Maintient la résilience du système grâce à une gestion des erreurs isolées
Principes de gestion des erreurs
Fail Fast : détectez et gérez les erreurs dès le début du pipeline
Essayez d'effectuer toutes sortes de validations avant ou au début du pipeline pour vous assurer qu'il n'échoue pas sur toute la ligne, car cela évite de gaspiller des ressources sur un travail non valide qui échouerait plus tard. C'est particulièrement crucial dans les modèles de distribution en mode éventail, car des données non valides pourraient bloquer les travailleurs ou gaspiller la capacité de traitement parallèle.
Cependant, ce n'est pas une règle stricte et cela dépend fortement de la logique métier. Voici comment nous pouvons le mettre en œuvre dans nos exemples concrets :
func fanOut(input <p>et<br> </p> <pre class="brush:php;toolbar:false">func fanIn(inputs ... <p>Remarque ! erreur chez un travailleur, l'autre ne s'arrête pas, ils continuent à traiter et cela nous amène au 2ème principe</p> <h3> Isoler les échecs : l'erreur d'un travailleur ne devrait pas affecter les autres </h3> <p>Dans un système de traitement parallèle, une mauvaise tâche ne devrait pas faire tomber l'ensemble du système. Chaque travailleur doit être indépendant.<br> </p> <pre class="brush:php;toolbar:false">func main() { // Create our input channel input := make(chan int) // Start sending numbers go func() { defer close(input) for i := 1; i <h4> Nettoyage des ressources : nettoyage approprié des erreurs </h4> <p>Les fuites de ressources lors du traitement parallèle peuvent rapidement dégénérer en problèmes à l’échelle du système. Un bon nettoyage est essentiel.</p> <hr> <p>Cela conclut notre plongée profonde dans le modèle Fan-In & Fan-Out ! Dans la prochaine étape, nous explorerons le <strong>modèle de concurrence des pools de travailleurs</strong>, dont nous avons eu un aperçu dans cet article. Comme je l'ai dit, nous éliminons progressivement les dépendances avant de passer à la suivante.</p> <p>Si vous avez trouvé cet article utile, si vous avez des questions ou si vous souhaitez partager vos propres expériences avec ce modèle, j'aimerais avoir de vos nouvelles dans les commentaires ci-dessous. Vos idées et vos questions contribuent à rendre ces explications encore meilleures pour tout le monde.</p> <p>Si vous avez manqué le guide visuel de la goroutine et des chaînes de Golang, consultez-le ici :</p> <div> <div> <img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173625990185651.png?x-oss-process=image/resize,p_40" class="lazy" alt="Modèle de concurrence Fan-In Fan-Out dans Go : un guide complet" loading="lazy"> </div> <div> <h2 id="Comprendre-et-visualiser-les-Goroutines-et-les-canaux-en-Golang">Comprendre et visualiser les Goroutines et les canaux en Golang</h2> <h3 id="Souvik-Kar-Mahapatra-décembre">Souvik Kar Mahapatra ・ 20 décembre 24</h3> <div> #aller #programmation #apprentissage #tutoriel </div> </div> </div> <p>Restez à l'écoute pour plus de modèles de concurrence Go ! ?</p> <p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173625992371812.gif?x-oss-process=image/resize,p_40" class="lazy" alt="Modèle de concurrence Fan-In Fan-Out dans Go : un guide complet" loading="lazy" style="max-width:90%" style="max-width:90%"></p>
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!

WHORSTINGGOCODEWITHINITFONCTIONS, USEZPLICITSETUPFUNCTIONSORSORSPARATETESTFILESTOAVOIDDEPENDENCYONINITFUNCTIONSIDEFFECTS.1) USEZPLICITSEUPFUNCTIONSTOCONTROLGLOBALVARIABIABLE INTIALISATION.2)

Go'SerrorHandlingReturnSerRorSasValues, contrairement à javaandpythonwhichuseexception.1) Go'smethodensuresexpliciterrorHandling, PromotingRobustCodeButincreingverbosity.2)

ANEFFICECTERACEINGOISMIMIMAL, CARY et PROMOTESLOOSECOUPLING.1) MINIMIZETHEITERFACEFLAXEBIBILITÉ ENFICATION

Le traitement des erreurs centralisés peut améliorer la lisibilité et la maintenabilité du code dans le langage Go. Ses méthodes et avantages d'implémentation incluent: 1. Séparer la logique de gestion des erreurs de la logique métier et simplifier le code. 2. Assurer la cohérence de la gestion des erreurs par manipulation centrale. 3. Utilisez un report et récupérer pour capturer et traiter les paniques pour améliorer la robustesse du programme.

Ingo, alternativestoinnitfunctionSincludCustomInitialization Manustres et Singletons.1) CustomInitialization Manustres aallowexplicit controlver

GohandlesInterfaces etTypeAssertionSEffectively, EnhancingCodeFlexibilityAndRobustness.1) TypeAssertionsallowruntimeTypeCHecking, asseenwithheshapeInterfaceandCirctleTy.2)

GO Language Les erreurs de la langue deviennent plus flexibles et lisibles via Errors.is et Errors. Comme fonctions. 1.Errors.is est utilisé pour vérifier si l'erreur est la même que l'erreur spécifiée et convient au traitement de la chaîne d'erreur. 2. ERRORS. As peut non seulement vérifier le type d'erreur, mais également convertir l'erreur en un type spécifique, ce qui est pratique pour extraire les informations d'erreur. L'utilisation de ces fonctions peut simplifier la logique de gestion des erreurs, mais faire attention à la livraison correcte des chaînes d'erreur et éviter une dépendance excessive pour éviter la complexité du code.

TomakeGoapplicationsRunfasterandMoreEfficiently, useProfilingTools, LeverageConcurrency et ManageMemoryEffective.1) useProfforcpuandMemoryProfilingtodentifyBottleneck


Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

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 !

Article chaud

Outils chauds

Télécharger la version Mac de l'éditeur Atom
L'éditeur open source le plus populaire

MinGW - GNU minimaliste pour Windows
Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Navigateur d'examen sécurisé
Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.
