المعالجة المتوازية في Golang: الاستفادة من التزامن للأداء
ضع في اعتبارك الكود المقدم، الذي يعرض المعالجة المتوازية مع goroutines. ومع ذلك، فإنه يثير تساؤلات حول إمكانية التنفيذ المتزامن والنهج الأمثل لتحقيق التوازي.
التنفيذ المتزامن للعمل
الفرضية القائلة بأن العمل سيتم تنفيذه بالتوازي هو غير مضمون. في حين توفر goroutines آلية التزامن خفيفة الوزن، يحدد برنامج جدولة نظام التشغيل تسلسل التنفيذ الفعلي. GOMAXPROCS، وفقًا لملاحظات إصدار Go 1.5، تتوافق عادةً مع النوى المتاحة.
النهج المقترح: منع الجمود والتحكم في التزامن
فيما يتعلق بالحفاظ على تنفيذ الوظيفة الرئيسية ، يمكن أن يكون fmt.Scanln غير موثوق به، خاصة في بيئات الإنتاج. بدلاً من ذلك، فكر في تنفيذ sync.WaitGroup للتأكد من اكتمال جميع الإجراءات قبل الخروج. بالإضافة إلى ذلك، لتعزيز التحكم في التزامن وضمان الاستخدام المناسب للموارد للمهام المتوازية، يوصى باستخدام القنوات المنفصلة لعمال العمل لكل goroutine.
وظيفة الأداة المساعدة لتنفيذ الوظائف المتوازية
]لتبسيط تنفيذ الوظيفة المتوازية، يمكن للمرء الاستفادة من وظيفة الأداة المساعدة الموجودة مثل ما يلي:
import "sync"
// Parallelize parallelizes function calls
func Parallelize(functions ...func()) {
var waitGroup sync.WaitGroup
waitGroup.Add(len(functions))
defer waitGroup.Wait()
for _, function := range functions {
go func(f func()) {
defer waitGroup.Done()
f()
}(function)
}
}
تطبيق هذه الوظيفة على مقتطف الكود:
func1 := func() { f(0) }
func2 := func() { f(1) }
func3 := func() { f(2) }
Parallelize(func1, func2, func3)
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3