سؤال

لم يكن Python الزائد استخداما جيدا متعدد النواة، فأين هو النقطة التي يجب أن تكون أسرع من موضوع python / multiprocessing؟

كل المعيار استخدم Stackless Python Trasslet مع المقارنة مع قفل الخيط في وثون في قائمة الانتظار، وهذا غير عادل، يسبب القفل دائما كفاءة منخفضة

انظر، إذا استخدمت وظيفة وظيفة واحدة بدون قفل يجب أن يكون فعالا مثل ثعبان بلا حدود

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

المحلول

التركيز على الوظيفة أولا، والأداء الثاني (إلا إذا كنت تعرف أن لديك الحاجة).

يقضي معظم الوقت على الخادم مع I / O، لذلك لا يساعد الكثير من النوى كثيرا. اذا كانت خاصة أنا / س الذي تعمل به، قد يكون بيثون متعدد الخيوط هو أبسط إجابة.

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

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

الكثير من الخيارات، ولكن ما لم تكن تتعامل مع سوميتينج كبير كبير, ، هل يمكن أن تأخذ على الأرجح نهج بسيط.

الافراج في وقت مبكر، والإفراج كثيرا.

نصائح أخرى

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

Bythonless Python هو إصدار من Python حيث تم تعديل VM نفسه لتحسين دعم هذه الرسائل حلقات IO حلقات IO، والخداع هي الخيوط الخضراء / Coloutines.

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

خرائط IO LOOP BIT مباشرة إلى كيفية امتداد مقابس بيركلي IO غير متزامن، ومع القليل من الجهد يمكن تمديده لتكون استباقية وليس تفاعلية وعمل مع أنظمة الملفات وكذلك مآخذ الشبكة، مثل أحدث libvent.

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

نظرا لخيارات التصميم الداخلي في Python VM، فمن الأفضل ألا تكون فعالا في الخيوط متعددة المعالجة متعددة المعالجة متعددة، لذلك تذهب إلى عمليات متعددة مع رسالة تمر عاجلا مما قد تكون على منصات أخرى.

ولكن بشكل عام، نهج تمرير الرسالة هو نظافة، صحيح بسهولة الإصدار.

وهناك لغات أخرى تبني هذا النهج نفسه مع أهداف وقيود إضافية مختلفة مثل Erlang، node.js، Clojure، اذهب.

من هؤلاء، كان عباءة الأكثر تفاعيمية. عندما تفهم كيف علبة القراد، والتفكير من خلال Whys., ، فإن أهداف وأكملها والقيود المتمثلة في النظم الأخرى ستقدر في مكانها ...

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