الأحد، 1 مارس 2020

تصميم موقع سهل

لترحيل البنية المماثلة من الحجب إلى عدم الحجب ، تتطلب الوظيفة (أو المهمة) التقاط الحالة الحالية ، بما في ذلك الوسائط والمتغيرات ونقاط التوقف ، عندما تحتاج إلى انتظار عمليات الإدخال / الإخراج. أيضًا ، يجب أن يكون المجدول قادراً على إعادة إدخال الوظيفة وتنفيذ التعليمات البرمجية المتبقية بعد انتهاء عمليات الإدخال / الإخراج. بخلاف لغات البرمجة الأخرى مثل C ++ ، يمكن لـ Python تحقيق المفاهيم التي تمت مناقشتها أعلاه بسهولة لأن منشئها يمكنه الحفاظ على كل الحالة وإعادة الدخول عن طريق استدعاء الوظيفة المدمجة في الموقع التالي (). من خلال استخدام المولدات ، يمكن التعامل مع عمليات الإدخال / الإخراج مثل المقتطف السابق ولكن نموذج غير محظور ، والذي يسمى رد الاتصال المضمن ، يمكن الوصول إليه داخل حلقة حدث.

حلقة الحدث

حلقة الحدث هي مجدول لإدارة المهام داخل البرنامج بدلاً من الاعتماد على أنظمة التشغيل. يعرض المقتطف التالي كيفية إجراء حلقة حدث بسيطة لمعالجة اتصالات المقبس بشكل غير متزامن. يتمثل مفهوم التنفيذ في إلحاق المهام في قائمة انتظار مهمة FIFO وتسجيل محدد عندما تكون عمليات الإدخال / الإخراج غير جاهزة. أيضًا ، يحتفظ المولد بحالة المهمة التي تتيح لها أن تكون قادرة على تنفيذ مهامها المتبقية دون وظائف رد الاتصال عندما تتوفر نتائج الإدخال / الإخراج. من خلال مراقبة كيفية عمل حلقة الحدث ، وبالتالي ، فإنه سيساعد في فهم مولد بيثون هو في الواقع شكل من أشكال coroutine.
عن طريق تعيين مهام في حلقة حدث للتعامل مع الاتصالات ، يشبه نمط البرمجة استخدام مؤشرات الترابط لإدارة عمليات الإدخال / الإخراج ولكن باستخدام جدولة على مستوى المستخدم. أيضًا ، يتيح PEP 380 تفويض المولد ، والذي يسمح للمولد بانتظار المولدات الأخرى لإنهاء وظائفها. من الواضح أن المقتطف التالي أكثر سهولة وقراءة من استخدام وظائف رد الاتصال للتعامل مع عمليات الإدخال / الإخراج.
خبير سيو
باستخدام حلقة حدث مع بناء جملة ، يمكن أن ينتج عن ، إدارة الاتصالات دون حظر الخيط الرئيسي ، وهو استخدام الوحدة النمطية ، غير المتزامن ، قبل Python 3.5. ومع ذلك ، فإن استخدام بناء الجملة ، العائد منه ، غامض لأنه قد يربط المبرمجين في عقدة: لماذا تجعل  تجعل المولد يصبح كوروتيني؟ بدلاً من استخدام العائد من التعامل مع العمليات غير المتزامنة ، يقترح PEP 492 أن يصبح coroutine مفهومًا مستقلًا في Python ، وهكذا تم تقديم بناء الجملة الجديد ، async / انتظار ، لتعزيز قابلية القراءة للبرمجة غير المتزامنة.

ما هو كوروتين؟
سيو
تعرّف وثيقة Python أن coroutines هي شكل عام من الروتين الفرعي. ومع ذلك ، هذا التعريف غامض ويعيق المطورين لفهم ما هي coroutines. استنادًا إلى المناقشة السابقة ، تكون حلقة الحدث مسؤولة عن جدولة المولدات لتنفيذ مهام محددة ، وهذا يشبه إرسال المهام إلى سلاسل الرسائل. في هذه الحالة ، تعمل المولدات مثل الخيوط المسؤولة عن "المهام الروتينية". من الواضح ، إن coroutine هو مصطلح يمثل مهمة تم تحديدها بواسطة حلقة حدث في برنامج بدلاً من أنظمة التشغيل. يعرض المقتطف التالي ماهيةcoroutine. يعمل هذا الديكور بشكل أساسي على تحويل وظيفة إلى وظيفة مولد واستخدام غلاف ، أنواع. كوروتين ، للحفاظ على التوافق مع الإصدارات السابقة.

استنتاج

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

هناك تعليق واحد: