تعزيز انتظار الرسائل لا تعتمد على قائمة انتظار الرسائل POSIX؟ من المستحيل لتحديد (2)؟

StackOverflow https://stackoverflow.com/questions/408059

سؤال

واعتقدت أن استخدام Boost.Interprocess في <لأ href = "http://www.boost.org/doc/libs/1_37_0/doc/html/interprocess/synchronization_mechanisms.html#interprocess.synchronization_mechanisms.message_queue" يختلط = "noreferrer"> انتظار الرسائل بدلا من مآخذ للاتصال داخل مضيف واحد. ولكن بعد حفر إلى ذلك، فإنه يبدو أن هذه المكتبة لسبب ما يتجنب POSIX منشأة قائمة انتظار الرسائل (الذي يدعم نظام بلدي لينكس)، وبدلا من ذلك نفذت على رأس الذاكرة المشتركة POSIX. واجهة مشابهة يكفي أنك قد لا أعتقد أن هذا الحق بعيدا، ولكن يبدو أن هذا هو الحال.

والجانب السلبي بالنسبة لي هو أن الذاكرة المشتركة التي تم الحصول عليها عن طريق shm_open(3) لا يبدو أن تكون صالحة للاستعمال مع select(2)، بدلا من طوابير رسالة POSIX التي تم الحصول عليها عن طريق mq_open(3).

ويبدو أن تفقد مكتبة دفعة في هذه القضية. لا أحد يفهم أعرف لماذا ينبغي أن يكون هذا؟ حتى لو هي عليه طوابير رسالة POSIX متوفرة فقط على بعض الأنظمة، أتوقع دفعة لاستخدام هذا المرفق حيث كان متوفرا، وreimplement إلا عند الضرورة. هناك بعض شرك النظام POSIX التي لا تعترف حتى الآن؟

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

المحلول

وأنا واجهت وضعا مماثلا في اليوم الآخر عند استخدام الطبقات Boost.Interprocess "متزامنة: وهي الطبقة الشرط. انها تنفذ بطريقة "عامة"، ولكن الطريقة التي تم القيام به هو استخدام spinlock العرف الذي هو للغاية غير فعال (على OS X على الأقل). لجميع الأغراض والمقاصد التي قطعتها الطبقات متزامنة عديمة الفائدة.

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

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

نصائح أخرى

نعم، للأسف لم يحدث ذلك. أنا أيضا بخيبة أمل عندما أدرك أنه بعد حفر المصادر.

ولكن هنا هو الآخر (جيد) جانب من هذه الحقيقة: إذا كان البرنامج يستخدم boost::asio، قد التفاف رسالة POSIX قوائم الانتظار API ك <القوي> فقط آخر <م> مخطط البيانات مصدر البيانات و هذا أن (IMHO) يكون أفضل حتى لاستخدام إذا كان جزء من boost::interprocess ... سيكون من غير تماما تافهة، ولكن (IMHO) بالتأكيد يستحق ذلك، لذلك قد عمل ث / MQ بطريقة موحدة واستخدام <م> السلطة من الاشياء boost::asio أخرى ...

... في مشروعي القادم اذا كنت بحاجة POSIX MQ مرة أخرى، وأنا بالتأكيد سوف تأخذ هذه الطريقة:)

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