بيثون مقابل جافا - ما الذي ستحصل على برمجة متزامنة ولماذا؟ [مغلق

StackOverflow https://stackoverflow.com/questions/1861457

سؤال

أيضا، إن لم يكن python أو java، فهل ستختار أكثر عموما لغة مكتوبة ثابتة أو لغة من النوع الديناميكي؟

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

المحلول

سأختار JVM على Python، في المقام الأول لأن الخيوط المتعددة في بيثون يعوقها فوري العالمي قفل. وبعد ومع ذلك، من غير المرجح أن تكون Java أفضل ما عند الركض على JVM. جلب أو سكالا (استخدام الجهات الفاعلة) من المرجح أن تكون أكثر ملاءمة لمشاكل متعددة الخيوط.

إذا اخترت Java، يجب عليك التفكير في استخدام java.util.concurrent. المكتبات وتجنب بدائريات متعددة الخيوط مثل متزامنة.

نصائح أخرى

بالتأكيد بيثون بلا تكدسفي أن المتغير الثعبان بشكل خاص جعل التزامن.

ولكن في النهاية، يعتمد ذلك على النظام الأساسي الخاص بك وما تحاول تحقيقه.

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

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

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

لماذا لا يكون لديك نظرة في erlang. (الذي لديه طباعة ديناميكية) و رسالة تمر, ، ال ممثل نموذج, ، وقراءة السبب جو ارمسترونغ لا يحب الذاكرة المشتركة. وبعد هناك أيضا مناقشة مثيرة للاهتمام حول التزامن Java باستخدام الأقفال والخيوط هنا على ذلك.

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

إن لم يكن جافا / بيثون سأذهب ل لغة وظيفية نظرا لأن اتخاذ آثار جانبية في الاعتبار هي واحدة من تعقيدات كتابة البرامج المتزامنة. (بقدر ما يذهب سؤالك: هذا يحدث مكتوبا ثابتا، لكن مترجم يسلس معظم الوقت)

شخصيا سأختار F #، منذ أن رأيت الكثير من الأمثلة الجميلة للكتابة البرمجيات المتزامنة بسهولة باستخدامه.

كإجراء مقدمة: هذا الرجل هو متعة بنفس القدر كما الملهم, ، حتى لا يجب أن شوهد إذا لم تكن مهتما ب F # ما من أي وقت مضى.

أود استخدام جافا، عبر جيثون. يحتوي Java على قدرات خيط قوي، ويمكن كتابةه باستخدام بناء جملة بيثون مع Jython، لذلك لديك أفضل ما في العالمين.

بيثون نفسها ليست جيدة حقا مع التزامن، وهي أبطأ من جافا على أي حال.

ولكن إذا كان لديك قضايا التزامن وأيده المجانية، فسوف ألقي نظرة على Erlang لأنها كانت تصميم لمثل هذه المشاكل. بالطبع، يجب أن تفكر في Erlang فقط إذا كان لديك:

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

لا هذا ولا ذاك. البرمجة المتزامنة من الصعب للغاية الحصول عليها. هناك خيار استخدام لغة البرمجة الموجهة نحو العملية accam-pi. الذي يعتمد على فكرة التواصل العمليات المتسلسلة و ال PI حساب التفاضل والتكامل. وبعد يتيح ذلك على تجميع وقت التحقق من طريق الجمود والعديد من المشكلات الأخرى التي تنشأ خلال تطوير النظم المتزامنة. إذا كنت لا تحب Occam-Pi، لا أستطيع إلقاء اللوم عليك إذا كنت لا تفعل ذلك، فيمكنك المحاولة اذهب اللغة الجديدة من Google التي تنفذ أيضا إصدار من CSP.

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

أود استخدام Java أو Scala، F # أو مجرد الذهاب إلى C ++ (MPI و OpenMPI).

بيئة Java (مكتبات JVM +) أفضل للتزامن من (ج) بيثون، ولكن Java تمتص اللغة. من المحتمل أن أذهب مع لغة أخرى على JVM - تم ذكر جيثون بالفعل، وكل كلاهما بدعم ممتاز للتزامن.

Clojure جيدة بشكل خاص - لديها دعم لهياكل البيانات المستمرة عالية الأداء والوكلاء وذاكرة المعاملات البرمجية. إنها لغة ديناميكية ولكن يمكنك منحها تلميحات تلميحات للحصول على أداء جيدة مثل Java.

راقب هذا الفيديو على InfoQ من قبل ريتشارد هيكي (خالق كلية) حول المشاكل مع الأساليب التقليدية للتزايز، وكيف يعالج كلوها.

أود أن أنظر إلى الهدف - ج وطريق الأساس. البرمجة المتزامنة غير المتزامنة، مقدمة بشكل جيد ل.

يعتمد هذا بالطبع على وصولك إلى أدوات مطور أبل أو Gnustep، ولكن إذا كان لديك إمكانية الوصول إلى أي منها، فهذا طريق جيد لاتخاذ البرمجة المتزامنة.

والجواب هو أن ذلك يعتمد. على سبيل المثال، تحاول الاستفادة من النوى المتعددة أو وحدة المعالجة المركزية على جهاز واحد أم أنك تريد توزيع مهمتك عبر العديد من الأجهزة؟ ما مدى أهمية السرعة مقابل سهولة التنفيذ؟

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

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

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

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