"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > أنماط التزامن في Go؛ حمامات العمال والمروحة الخارجية/المروحة الداخلية

أنماط التزامن في Go؛ حمامات العمال والمروحة الخارجية/المروحة الداخلية

تم النشر بتاريخ 2024-11-06
تصفح:201

Concurrency patterns in Go; worker pools and fan-out/fan-in

تشتهر Go بنموذج التزامن الاستثنائي الخاص بها، لكن العديد من المطورين يركزون فقط على goroutines والقنوات. ومع ذلك، فإن أنماط التزامن مثل تجمعات العمال والمروحة الخارجية/المروحة الداخلية توفر كفاءة حقيقية.

ستتطرق هذه المقالة إلى هذه المفاهيم المتقدمة، مما يساعدك على زيادة الإنتاجية إلى أقصى حد في تطبيقات Go الخاصة بك.

لماذا يهم التزامن

يتيح التزامن للبرامج أداء المهام بكفاءة، خاصة عند التعامل مع مهام مثل عمليات الإدخال/الإخراج أو طلبات الويب أو معالجة الخلفية. في Go، توفر goroutines طريقة خفيفة الوزن لإدارة الآلاف من المهام المتزامنة، ولكن بدون هيكل، يمكن أن تواجه اختناقات. وهنا يأتي دور تجمعات العمال وأنماط المشجعين للخارج/المروحة للداخل.

حمامات العمال

تسمح لك مجموعات العمال بالحد من عدد goroutines عن طريق تعيين المهام إلى "العمال" الثابتين. وهذا يمنع الإفراط في الاشتراك، ويقلل من استهلاك الموارد، ويجعل تنفيذ المهام قابلاً للإدارة.


package main

import (
    "fmt"
    "sync"
    "time"
)

func worker(id int, jobs 

في هذا المثال:

  • لدينا ثلاثة عمال يقومون بمعالجة الوظائف في وقت واحد.
  • يتم تمرير كل وظيفة إلى العمال عبر القنوات، ويتم جمع النتائج للمعالجة.

نمط المروحة للخارج/للدخل

يسمح نمط المروحة للخارج/المروحة الداخلية لعدة goroutines بمعالجة نفس المهمة، بينما يقوم المروحة الداخلية بجمع النتائج مرة أخرى في مخرجات واحدة. وهذا مفيد لتقسيم المهام ومن ثم تجميع النتائج.


package main

import (
    "fmt"
    "sync"
    "time"
)

func workerFanOut(id int, tasks 

في الكود أعلاه:

  • Fan-Out: نقوم بإنشاء العديد من goroutines (العمال) الذين يتعاملون مع المهام بشكل متزامن.
  • المشاركة: بعد المعالجة، يمكن تجميع نتائج جميع العاملين لمزيد من المعالجة.

يمكن تطبيق أنماط التزامن لتحسين خوادم الويب أو أنظمة معالجة الدفعات أو التطبيقات المرتبطة بالإدخال/الإخراج. يضمن استخدام أنماط مثل تجمعات العمال والمروحة الخارجية/المروحة الداخلية الاستخدام الأمثل للموارد دون إرهاق سعة النظام.

الخطوات التالية لزيادة معرفتك:

  • اكتشف كيف يمكن توسيع هذه الأنماط لتشمل تحديات التزامن الأخرى.
  • إنشاء خدمة ويب في الوقت الفعلي باستخدام مجموعة من العاملين لإدارة الطلبات.

مفتاح النجاح في تزامن Go هو الهيكل. سيؤدي إتقان أنماط التزامن هذه إلى رفع مستوى مهاراتك في Go ومساعدتك في كتابة تطبيقات عالية الأداء.

ترقبوا المزيد من الأفكار حول Go في المشاركة التالية!

يمكنك دعمي بشراء كتاب لي :)

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/envitab/concurrency-patterns-in-go-worker-pools-and-fan-outfan-in-6ka?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ Study_golang@163 .com لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3