سؤال

أنا أعمل على مشروع يستخدم قائمة انتظار يحتفظ بالمعلومات حول الرسائل التي يجب إرسالها إلى المضيفين عن بُعد. في هذه الحالة ، يكون مؤشر ترابط واحد مسؤولاً عن وضع المعلومات في قائمة الانتظار وخيط آخر مسؤول عن الحصول على معلومات من قائمة الانتظار وإرسالها. يحتاج الموضوع الثاني إلى التحقق من قائمة الانتظار للحصول على المعلومات بشكل دوري.

ولكن في وقت لاحق وجدت أن هذا هو إعادة اختراع العجلة :) يمكنني استخدام قائمة انتظار الحظر لهذا الغرض.

ما هي المزايا الأخرى لاستخدام قائمة انتظار الحظر للتطبيق أعلاه؟ (على سبيل المثال: الأداء ، قابل للتعديل من الكود ، أي حيل خاصة وما إلى ذلك)

هل كانت مفيدة؟

المحلول

الميزة الرئيسية هي أن أ BlockingQueue يوفر تنفيذًا صحيحًا آمنًا للمعلومات. قام المطورون بتنفيذ هذه الميزة بأنفسهم لسنوات ، لكن من الصعب الحصول على حق. الآن يتمتع وقت التشغيل بتنفيذ تم تطويره ومراجعته وصيانته من قبل خبراء التزامن.

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

نصائح أخرى

إنها شيء رئيسي تقضيه باستخدام قائمة انتظار الحظر هو "الاقتراع". هذا هو المكان الذي تقول فيه

في هذه الحالة ، يحتاج الخيط الثاني إلى التحقق من قائمة الانتظار للحصول على المعلومات بشكل دوري.

يمكن أن يكون هذا غير فعال للغاية - باستخدام الكثير من وقت وحدة المعالجة المركزية غير الضرورية. يمكن أن تقدم أيضا زمنات زمنية غير ضرورية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top