سؤال

ما هي أفضل طريقة للاتصال بين العمليات في تطبيق جافا متعدد مؤشرات الترابط.

يجب أن يكون أداءه (لذلك لا يوجد JMS من فضلك) سهل التنفيذ وموثوق به ، بحيث يمكن ربط الكائنات والبيانات بخيط واحد فقط؟

نرحب بأي أفكار!

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

المحلول

بافتراض السيناريو 1 JVM، فإن سلاسل الرسائل المتعددة، إذن، java.util.concurrent هي المكان المناسب للبحث، وتحديدًا تطبيقات قائمة الانتظار المختلفة.لكن التجريد علاوة على ذلك قد يكون رائعًا وهناك جيتلانج يبدو تمرير رسائل Java مثيرًا للاهتمام وخفيف الوزن.

نصائح أخرى

هل يمكنك التوضيح قليلا؟هل تقصد IPC في JVM واحد؟(خيوط متعددة، نعم، ولكن على مستوى نظام التشغيل عملية واحدة فقط.) أو هل تقصد عدة JVMs؟(والاتصالات بين العمليات على مستوى نظام التشغيل حقًا.)

إذا كان هو الأول، فربما يكون هناك شيء خارج java.util.concurrent, ، يحب قائمة الانتظار المتزامنة سوف تفعل الخدعة.(أقوم بتمرير رسالة بين سلاسل الرسائل الخاصة بي مع فئات من java.util.concurrent بنجاح.)

إذا كان الأمر لاحقًا، فسأقوم فقط بالتخمين وأقترح إلقاء نظرة عليه جمهورية جزر مارشال, ، على الرغم من أنني لا أعتقد أنه يمكن الاعتماد عليه تمامًا - إلا أنه سيتعين عليك إدارة هذا الأمر بقدر أكبر من "التدريب العملي".

أوصي بالنظر في كامل java.util.concurrent الحزمة، والتي تحتوي على فئات متعددة للتعامل مع التزامن ووسائل الاتصال المختلفة بين المواضيع.كل هذا يتوقف على ما تريد تحقيقه، لأن سؤالك عام جدًا.

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

لقد قمت للتو بإضافة MappedBus على جيثب (http://github.com/caplogic/mappedbus) وهي مكتبة IPC فعالة تمكن العديد من عمليات Java/JVMs من التواصل عن طريق تبادل الرسائل وتستخدم ملفًا معينًا للذاكرة للنقل.وقد تم قياس التدفق إلى 40 مليون رسالة/ثانية.

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