سؤال

هناك العديد من الأسئلة المتعلقة بثبات الثعبان. ولكن لا شيء يجيب على هذا سؤالي، وأعتقد (تصحيح لي إذا كان الخطأ - من فضلك!). هناك بعض الطنانة حول الأمر طوال الوقت لذلك أنا فضولي لمعرفة. ماذا يمكنني استخدام مكشوفة ل؟ كيف هو أفضل من cpephon؟

نعم يحتوي على خيوط خضراء (تكثيف) تسمح بسرعة بإنشاء العديد من المواضيع خفيفة الوزن طالما لم يتم حظر أي عمليات (شيء مثل خيوط روبي؟). ما هذا عظيم ل؟ ما هي الميزات الأخرى التي أرغب في استخدامها في CpeThon؟

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

المحلول

يسمح لك بالعمل بمبالغ هائلة من التزامن. لن يخلق أحد عاقل مائة ألف مؤشر ترابط، ولكن يمكنك القيام بذلك باستخدام Stackless.

اختبارات المقالة هذه تفعل ذلك، مما يخلق مائة ألف مهمة في كل من Python و Google Google (لغة برمجة جديدة): http://dalkescientic.com/Writings/Diary/archive/2009/11/15/100000_tasklets.html

من المستغرب، حتى لو تم تجميع Google Go إلى التعليمات البرمجية الأصلية، فهي تنفذ تنفيذ الروتين المشاركين، ولا يزال بيثون يفوز.

سيكون Stackless جيدا لتنفيذ خوارزمية / تقليل الخريطة، حيث يمكنك الحصول على عدد كبير جدا من المخفضات اعتمادا على بيانات الإدخال الخاصة بك.

نصائح أخرى

الفائدة الرئيسية ل Backless Python هي الدعم ل Coloutines خفيفة الوزن للغاية. لا يدعم CpeThon Coroutines أصلا (على الرغم من أنني أتوقع أن يقوم شخص ما بنشر هاكا قائمة على المولدات في التعليقات)، فهذا سيكون تحسنا واضحا على Cpython عندما يكون لديك مشكلة تستفيد من Coroutines.

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

You still have many of the typical problems with concurrency correctness however regarding shared data, but the deterministic task switching makes it easier to write safe code since you know exactly where control will be transferred and therefore know the exact points at which the shared state must be حتى الآن.

ذكر thirler بالفعل أن تكثيف يستخدم في حواء عبر الإنترنت. لا تنسى:

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

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

(حصلت على هذا الاقتباس من هنا)

في Pycon 2009، تم تقديمه حديث مثير جدا للاهتمام, واصفا لماذا وكيف يستخدم تكثيف في ألعاب CCP.

أيضا، هناك جيدة جدا مادة تمهيدية, ، والتي تصف لماذا تكدس حل جيد للتطبيقات الخاصة بك. (قد يكون قديما إلى حد ما، لكنني أعتقد أنه يستحق القراءة).

Eveonline مبرمجة إلى حد كبير في ثعبان بلا حدود. لديهم العديد من مدونات dev على استخدامها. يبدو أنه مفيد للغاية للحوسبة عالية الأداء.

في حين أنني لم أستخدمها بشكل مكتشفة نفسها، فقد استخدمت فنجريا لتنفيذ تطبيقات الشبكة المتزامنة للغاية. وضعت بعض حالات الاستخدام Linden Lab تجاهها هي: الوكلاء الذكيين عالي الأداء، ونظام سريع لتوزيع الأوامر على أرقام هائلة من الآلات، وتطبيق يقوم بتكثيف طن من قاعدة البيانات ويقرأ (عند نسبة حوالي 1 : 2، وهو عبء الكتابة للغاية، لذلك يقضي معظم وقته في انتظار قاعدة البيانات للعودة)، وشأن من نوع المجنز على شبكة الإنترنت لبيانات الويب الداخلية. في الأساس أي تطبيق يتوقع أن يؤدي إلى القيام بالكثير من الشبكة I / O سوف يستفيد من القدرة على إنشاء مؤشرات صوت خفيفة الوزن Bajillion. 10000 عملاء متصل لا يبدو وكأنه صفقة ضخمة بالنسبة لي.

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

إذا كان هذا التطبيق الذي تريد كتابة الأصوات مثل ما كتبته عنه، فكر في أحد هذه المكتبات. يختار اختيار Greadlet VS عديم الاستخدام أقل أهمية إلى حد ما من تحديد المكتبة التي تناسب احتياجات ما تريد القيام به.

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

def Run():
    # Do stuff
    request_information() # This call might block
    # Proceed doing more stuff

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

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

كما أنه مثير للاهتمام بالنسبة للنوى المتعددة للتخفيف من انتظار الأقفال:

def Run():
    # Do some calculations
    green_lock(the_foo)
    # Do some more calculations

ال green_lock ستحاول الدالة بشكل أساسي اكتساب القفل والتبديل فقط إلى جدولة رئيسية إذا فشلت بسبب النوى الأخرى باستخدام الكائن.

مرة أخرى، يتم استخدام الخيوط الخضراء لتخفيف الحظر، مما يتيح لك كتابة التعليمات البرمجية بشكل طبيعي ولا يزال أداء جيدا.

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