بروتوكولات الدفع مقابل السحب
أنت تطور نموذج الأحداث المنفصلة الخاص بك، وترى وكلاءك يتحركون من كتلة إلى أخرى. بسيط أليس كذلك؟ لكن هل توقفت للحظة لتسأل نفسك لماذا يتحركون أصلاً؟ ما هو ذلك الشيء الذي يجعلهم يتحركون؟
إذا سألت مبتدئًا، ستأتي الإجابة من حدس بحت: “حسنًا، إذا كان الوكيل في كتلة تأخير وانتهى وقت التأخير، سيعرف الوكيل ببساطة أن عليه الانتقال إلى الكتلة التالية”. لكن هذه الإجابة خاطئة في الواقع. الوكيل لا يفعل شيئًا. الوكيل في الحقيقة مجرد حجر بلا حياة يتم دفعه وسحبه عبر تدفق العملية بواسطة الكتل نفسها.
كيف يحدث هذا؟ حسنًا، أولاً لنعترف بحقيقة أن الكتل التي تجدها في مكتبة نمذجة العمليات ليست سوى وكلاء متنكرين. لديك وكيل تأخير، وكيل طابور، إلخ. وكما تفعل الوكلاء، تتواصل الكتل مع بعضها البعض. عندما تربط كتلتين في نموذج أحداث منفصلة، فأنت في الأساس تولّد بوابة اتصال لهذه الكتل.
هناك نوعان من البروتوكولات. الدفع والسحب. في عالم AnyLogic الافتراضي، تستخدم جميع الكتل بروتوكول السحب، باستثناء الكتل القادرة على توليد الوكلاء (مثل كتل source و enter)، التي تستخدم بروتوكول الدفع. ينطبق البروتوكول على الكتلة التي تحاول إرسال الوكيل إلى الكتلة التالية.
بروتوكول السحب: ستُخطر الكتلة الكتلة المستقبلة بأن هناك وكيلاً جاهزًا للخروج. إذا كانت الكتلة المستقبلة قادرة على استقبال ذلك الوكيل، يتم إرسال الوكيل. إذا لم تكن كذلك، يبقى الوكيل في مكانه وستحاول الكتلة المستقبلة الحصول عليه مرة أخرى في المستقبل عندما تكون قادرة على استقبال شيء.
بروتوكول الدفع: سيتم دفع الكتلة إلى الكتلة المستقبلة دون أي طلب. هذا ينتج أخطاء. وهذه هي الأخطاء التي نكتشفها لأول مرة عندما نبدأ باستخدام AnyLogic، على سبيل المثال عندما لا تكون هناك مساحة متاحة في طابور موجود بعد كتلة source. نعم، لأن كتلة source تستخدم بروتوكول الدفع كإعداد افتراضي.

لكن ليست كل الكتل قادرة على استخدام بروتوكول الدفع. لمعرفة أيها يمكن وأيها لا يمكن، ستجد خيار “Forced Push” في القسم المتقدم من خصائص الكتلة.

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