سؤال

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

ملحوظة:أنا مهتم بشكل خاص بالأشياء التي يُقصد بها أن تكون مشابهة لـ Erlang، وليس فقط أي مكتبة ترابط أو قائمة انتظار.

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

المحلول

واجهة تمرير الرسائل (MPI) (http://www-unix.mcs.anl.gov/mpi/) هي مكتبة قوية وقابلة للتطوير بدرجة كبيرة للبرمجة المتوازية، وهي موجهة في الأصل نحو لغة C ولكنها متاحة الآن بعدة نكهات http://en.wikipedia.org/wiki/Message_Passing_Interface#Implementations.على الرغم من أن المكتبة لا تقدم تركيبًا جديدًا، إلا أنها توفر بروتوكول اتصال لتنظيم مشاركة البيانات بين الإجراءات القابلة للتوازي.

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

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

على سبيل المثال (http://en.wikipedia.org/wiki/OpenMP#Work-sharing_constructs):

#define N 100000
int main(int argc, char *argv[])
{
  int i, a[N];
  #pragma omp parallel for
  for (i=0;i<N;i++) 
     a[i]= 2*i;
  return 0;
}

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

نصائح أخرى

أولف ويجر كان لديه منشور رائع مؤخرًا حول هذا الموضوع - إليك الخصائص التي يحددها كما هو مطلوب قبل أن تتمكن من تسمية شيء ما "Erlang Style Concurrency":

  • عملية إنشاء/تدمير سريعة
  • القدرة على دعم >> 10000 عملية متزامنة مع خصائص لم تتغير إلى حد كبير.
  • تمرير سريع للرسائل غير المتزامنة.
  • نسخ دلالات تمرير الرسائل (التزامن مع عدم مشاركة أي شيء).
  • عملية الرصد.
  • استقبال الرسائل الانتقائية.

الرقم 2 أعلاه هو الأصعب في دعم الأجهزة الافتراضية وتطبيقات اللغة التي لم يتم تصميمها في البداية للتزامن.لا يهدف هذا إلى تعطيل تطبيقات التزامن Erlang-ish في اللغات الأخرى، ولكن الكثير من قيمة Erlang تأتي من القدرة على إنشاء ملايين من العمليات، وهو أمر صعب للغاية إذا كان تجريد العملية له علاقة 1-1 مع مؤشر ترابط أو عملية على مستوى نظام التشغيل.لدى Ulf الكثير حول هذا الموضوع في الرابط أعلاه.

سكالا يدعم الممثلين.لكنني لن أسمي سكالا عمدا مشابهة لإيرلانج.

ومع ذلك، فإن سكالا تستحق بالتأكيد إلقاء نظرة عليها!

مايكروسوفت وقت تشغيل التزامن والتنسيق ل.NET.

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

أيضًا الكليم هي مكتبة لجافا، والتي تجلب تمرير/ممثلي رسائل نمط إيرلانج إلى لغة جافا.

أنشأ مايك ريتيج مكتبة .NET تسمى ريتلانج ومنفذ Java يسمى Jetlang المستوحى من نموذج التزامن الخاص بـ Erlang.

إجابة Microsoft غير الجاهزة للإنتاج على Erlang: مايكروسوفت أكسوم

بالنسبة لبيثون، يمكنك تجربة استخدام وحدة المعالجة.

النمل الأبيض لمخطط المناورة.

إذا كنت تستخدم روبي، قم بإلقاء نظرة على Revactor:[http://revactor.org/][1]

Revactor هو تطبيق لنموذج Actor لـ Ruby 1.9 مبني على أعلى مكتبة الأحداث عالية الأداء Rev.تم تصميم Revactor بشكل أساسي لكتابة خدمات وأدوات الشبكة المشابهة لـ Erlang.

ألق نظرة على نموذج التعليمات البرمجية هذا:

  myactor = Actor.spawn do
    Actor.receive do |filter|
      filter.when(:dog) { puts "I got a dog!" }
    end
  end

Revactor يعمل فقط على Ruby 1.9.أعتقد أن مؤلف المكتبة قد توقف عن صيانتها ولكن الوثائق الموجودة على موقعه جيدة جدًا.

قد ترغب أيضًا في إلقاء نظرة على Reia:لغة برمجة تشبه الياقوت مبنية على الجزء العلوي من Erlang VM.Reia هو المشروع الجديد لمنشئ Revactor:توني أرسيري.

تحذير:المكونات وقح!

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

فولكر

جوكامل يمتد OCaml مع حساب التفاضل والتكامل للبرمجة المتزامنة والموزعة.

عكا (http://akka.io) يتأثر بشدة بـ erlangs OTP.لقد تم بناؤه على ممثلي Scala وهو رائع للتزامن على JVM.

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