الاتصال غير المتزامن مع جاهزية القناة
في Go، تسهل القنوات الاتصال المتزامن بين goroutines. عند التعامل مع قنوات الإرسال المخزنة مؤقتًا وقنوات الاستقبال غير المخزنة مؤقتًا، فمن الممكن الاختيار على كلتا القناتين في وقت واحد لتحسين تدفق الاتصال. تستكشف هذه المقالة أسلوب تنفيذ هذه الوظيفة مع تقليل استخدام وحدة المعالجة المركزية.
لفهم المشكلة، خذ في الاعتبار السياق التالي:
s := make(chan السؤال الذي يطرح نفسه هو ما إذا كان من الممكن الاختيار في كلتا القناتين بحيث يتم تحديد r عندما تكون البيانات متاحة للقراءة، ويتم تحديد s عندما القناة ليست ممتلئة.
الحل
يمكن للمرء تحقيق ذلك باستخدام عبارة تحديد مع حالة افتراضية. نظرًا لأنه يتم تقييم القيمة المراد إرسالها مرة واحدة فقط عند استخدام التحديد، إذا لم تكن كلتا القناتين جاهزتين، تصبح القيمة قديمة. لتجنب ذلك، تتم إضافة حالة افتراضية إلى بيان التحديد، والذي يتم تنفيذه إذا لم تكن أي من القناتين جاهزتين. في هذه الحالة الافتراضية، ينام البرنامج لفترة قصيرة، مما يسمح للقنوات بأن تصبح جاهزة، ثم يحاول مرة أخرى بقيمة محدثة.s := make(chan تحذير
لا يوصى باستخدام len(r) أو cap(s) للتحقق من جاهزية القناة ثم الإرسال/الاستقبال لأن القناة قد تغير حالتها بين الشيك ومحاولة الإرسال/الاستلام.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3