متعددة النواة و التزامن - اللغات والمكتبات تقنيات تطوير [مغلقة]

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

سؤال

العمارة وحدة المعالجة المركزية المشهد قد تغير ، متعددة النوى هو الاتجاه من شأنها أن تغير الطريقة لدينا لتطوير البرمجيات.لقد فعلت متعددة الخيوط التنمية في C و C++ و Java, لقد فعلت متعدد عملية التنمية باستخدام مختلف IPC الآليات.النهج التقليدية من استخدام المواضيع لا يبدو أن تجعل من السهل بالنسبة للمطور ، إلى الاستفادة من الأجهزة التي تدعم وجود درجة عالية من التوافق.

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

ما رأيته حتى الآن هو:

  • إرلانج:العملية القائمة, رسالة يمر IPC ، 'الفاعل نموذج من التزامن
  • Dramatis:الجهات الفاعلة نموذج مكتبة روبي وبايثون
  • سكالا:البرمجة الوظيفية لغة JVM مع إضافة بعض التزامن الدعم
  • Clojure:البرمجة الوظيفية لغة JVM مع الجهات المكتبة
  • النمل الأبيض:ميناء إرلانج عملية النهج تمرير الرسائل إلى مخطط

ماذا تعرف عن ماذا عملت لك ماذا تعتقد هي مثيرة للاهتمام لمشاهدة ؟

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

المحلول

أقترح اثنين من تحولات:

برنامج المعاملات الذاكرة

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

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

الحدث الحلقات وعود

آخر بطريقة مختلفة جدا من التعامل مع التزامن يتم تنفيذها في [E لغة البرمجة](http://en.wikipedia.org/wiki/E_(programming_language%29).

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

نصائح أخرى

ذكرت جافا, ولكن فقط أذكر المواضيع.هل نظرت في جاوة المتزامنة المكتبة ؟ فإنه يأتي المجمعة مع جافا 5 وما فوق.

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

لقد استعملت تجهيز لبيثون.فإنه mimicks API من خيوط وحدة وبالتالي من السهل جدا للاستخدام.

إذا كنت يحدث أن استخدام map/imap أو مولد/قائمة الفهم, تحويل التعليمات البرمجية لاستخدام processing مباشرة:

def do_something(x):
    return x**(x*x)

results = [do_something(n) for n in range(10000)]

يمكن أن تكون بشكل متوازي مع

import processing
pool = processing.Pool(processing.cpuCount())
results = pool.map(do_something, range(10000))

والتي سوف تستخدم بيد أن العديد من المعالجات لديك لحساب النتائج.هناك أيضا كسول (Pool.imap) وغير المتزامن المتغيرات (Pool.map_async).

هناك طابور الدرجة التي تنفذ Queue.Queue, والعمال التي هي مماثلة لتلك المواضيع.

Gotchas

processing على أساس fork(), الذي يجب أن يحتذى على ويندوز.الكائنات التي يتم نقلها عبر pickle/unpickle, لذا عليك التأكد من أن يعمل هذا.التفرع عملية اكتسب الموارد بالفعل قد لا يكون ما تريد (أعتقد اتصالات قاعدة البيانات) ، ولكن بشكل عام كان يعمل.أنه يعمل بشكل جيد بحيث أنه قد تم إضافة إلى بيثون 2.6 على المسار السريع (cf. بيب-317).

إنتل خيوط اللبنات C++ تبدو مثيرة للاهتمام للغاية بالنسبة لي.أنها توفر مستوى أعلى بكثير من التجريد من الخام المواضيع.أورايلي جدا كتاب لطيف إذا كنت مثل شجرة ميتة الوثائق.انظر أيضا أي تجارب مع إنتل خيوط بناء كتل ؟ .

أود أن أقول:

النماذج:المواضيع + المشتركة الدولة الفاعلة + رسالة عابرة ، المعاملات الذاكرة, خريطة/تقليل?اللغات:إرلانج ، Io ، سكالا ، Clojure, أتاح المكتبات:Retlang, Jetlang, الكليم, Cilk++, شوكة/join, MPI, Kamaelia الطين

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

http://concurrency.tumblr.com

لقد تم القيام البرمجة المتزامنة في ادا ما يقرب من 20 عاما من الآن.

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

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

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

Kamaelia هو بيثون إطار بناء التطبيقات مع الكثير من التواصل العمليات.

Kamaelia - التزامن جعل مفيدة وممتعة

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

أي نوع من النظم ؟ خوادم الشبكة, عملاء, تطبيقات سطح المكتب, pygame القائمة على الألعاب ، فيرت أنظمة أنابيب التلفزيون الرقمي أنظمة غير مرغوب فيها eradicators, أدوات التدريس ، كمية عادلة أكثر :)

وهنا شريط فيديو من Pycon 2009.ويبدأ بمقارنة Kamaelia إلى الملتوية موازية الثعبان ثم يعطي اليدين على مظاهرة Kamaelia.

من السهل التزامن مع Kamaelia - الجزء 1 (59:08)
من السهل التزامن مع Kamaelia - الجزء 2 (18:15)

أنا أعرف من أتاح - اللغة التي تقوم على إرلانج ولكن تبدو أكثر مثل الثعبان/روبي.

هذا السؤال يرتبط ارتباطا وثيقا ، إن لم يكن نسخة مكررة ، ما الموازية نموذج البرمجة هل توصي اليوم إلى الاستفادة من manycore المعالجات من غدا ؟

OpenMP.

أنه يتعامل مع المواضيع لك حتى أنت فقط تقلق بشأن أي أجزاء من C++ التطبيق الذي تريد تشغيله في نفس الوقت.

على سبيل المثال.

#pragma omp parallel for
for (int i=0; i < SIZE; i++) 
{
// do something with an element
}

رمز أعلاه سيتم تشغيل للحلقة على العديد من المواضيع كما قلت قانون الزواج وقت الاستخدام, حتى إذا كان حجم هو 100 لديك رباعية النوى مربع ، أن الحلقة سيتم تشغيل 25 بندا في كل نواة.

هناك عدد قليل أخرى موازية امتداد لغات مختلفة ، ولكن تلك أنا مهتمة أكثر هي تلك التي تعمل على بطاقة الرسومات الخاصة بك.هذا هو الحقيقي المعالجة المتوازية :) (أمثلة: GPU++ و libSh)

C++0x سيوفر std::lock وظائف تأمين أكثر من مزامنة معا.هذا سوف يساعد على التخفيف من الجمود بسبب الخروج من أجل تأمين.أيضا, C++0x موضوع المكتبة سوف يكون الوعود والعقود الآجلة وتعبئتها المهام التي تسمح موضوع انتظار نتيجة عملية أجريت على موضوع آخر دون أي مستخدم على مستوى أقفال.

multiprocessing هو بيثون مكتبة يبسط متعددة البرمجة الأساسية ، satellite في جواب آخر.

برنامج مكتوب مع بايثون multiprocessing يمكن بسهولة تعديل سفينة العمل على السحابة بدلا من المحلية النوى. piCloud يستفيد من هذا توفير كبير على الطلب تجهيز الطاقة على السحابة:تحتاج فقط إلى تعديل 2 الأسطر من التعليمات البرمجية الخاصة بك.

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

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