# جي سي إس بي

جي سي اس بي (JCSP) هو تنفيذ لعمليات الاتصال المتعددة (CSP) للغة البرمجة جافا.

## نبذة

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

## نظرة عامة

هناك أربع طرق يمكن ان تؤدي إلى فشل البرامج متعددة المسارات بشكل غير قابل للاختبار:
* شروط السباق - قد يكون للمتغيرات المشتركة اوضاع غير محددة لان العديد من مؤشرات الترابط تصل إليها بوتيرة متزامنة بدون قفل كاف.
* طريق مسدود - يصل اثنين أو أكثر من الخيوط إلى طريق مسدود عندما يحاولون النيل على اقفال أو موارد أخرى بطريقة متضادة.
* الاستعصاء - طريق مسدود ولكن ينتج عنه اهدار لا نهاية له لوقت وحدة المعالجة المركزية (CPU)
* التجويع - يعجز واحد أو أكثر من الخيوط في اتمام أي عمل، مما يضر بنتيجة خوارزميات البرنامج.
بشكل عام، لا يمكن التأكد من خلو البرنامج من هذه الأخطاء بمجرد عمل تجربة مكثفة. بالرغم من أهمية إجراء اختبارات صارمة، إلا أنها لا تكفي. عوضا من من ذلك، من امهم أن يكون بحوزتك تصميم يمكنه إثبات خلو البرنامج هذه المخاطر الأربعة. يسمح CSP بذلك باستخدام الرياضيات ويتيح JCSP القيام بذلك بشكل عملي في برامج Java.
وتكمن الاستفادة الكبرى في الرياضيات في انه يمكن إنتاج ضمانات أقوى للسلوك الصحيح مما هو ممكن مع التطوير التقليدي المخصص، لحسن الحظ، لا يجبر JCSP مستخدميه على سلوك نهج رياضي بأنفسهم، ولكنه يسمح لهم بالاستفادة من الرياضيات التي تدعم المكتبة.
لاحظ أن عملية مصطلح CSP تُستخدم أساسًا كمرادف للخيط في لغة Java ؛ عملية في CSP هي وحدة تنفيذ خفيفة الوزن تتفاعل مع العالم الخارجي بواسطة الأحداث وهي عنصر نشط يغلف هياكل البيانات التي تعمل عليها.
نظرًا لأن تغليف البيانات يتم في كل خيط (لكل عملية بلغة CSP)، لا يوجد عادةً اعتماد على مشاركة البيانات بين سلاسل العمليات. عوضا من ذلك، يتم الاقتران والالتقاء بين الخيوط عبر نقاط اتصال محددة جيدًا وتكمن الفائدة في أن كل مؤشر ترابط يمكن اعتباره على نطاق واسع كيانًا «ذو ترابط واحد» أثناء إنشاءه، مما يجنب المطور عدم التأكد حول ما إذا كان سيستخدم الكلمات الأساسية المتزامنة الخاصة بجافا وأين يستخدمها، وفي نفس الوقت يضمن التحرر من ظروف السباق. يوفر JCSP مبادئ جلية لتصميم الاتصال بين الخيوط بطريقة يمكن إثبات أنها خالية من الطريق المسدود.
يوجد تشابه جلي بين بعض الفئات في Java API القياسي (java.util.concurrent) وبعضها في JCSP. فئات قنوات JCSP تشبه BlockingQueue . هناك فرق واحد مهم: يوفر JCSP أيضًا ملفAlternative للسماح بالاختيار بين المدخلات؛ هذه الإمكانية غير متوفرة في Java API القياسي. التناوب هو أحد المفاهيم الأساسية التي يستخدمها CSP لمحاكاة الأحداث في العالم الحقيقي.
و إثبات ان البديل يعمل بصورة ممتازة من خلال التحليل الرياضي الشامل لمساحة الدولة الخاصة به، مما يضمن عدم التسبب بالطريق المسدود.

## طبقة الشبكات

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

## إصدارات أخرى
### إصدار الروبوت

JCSP re هي نموذج مصغر للغاية من حزم JCSP تم تطويرها في حوالي عام 2008 في جامعة نابير في إدنبرة من قبل البروفيسور جون كيريدج وأليكس بانايوتوبولوس وباتريك ليسمور. يعد البحث في JCSP لبيئات الروبوتات و JCSP للبيئات المتنقلة مجالًا نشطًا للبحث في جامعة نابير في إدنبرة. يمكن التطبيق العملي لـ 'JCSP re' بتطوير نفس البرنامج المتزامن للروبوتات. على وجه التحديد، كانت الروبوتات المستهدفة لهذا البحث هي Lego Mindstorms NXTs لأنها تستطيع تشغيل الجهاز الظاهري الشهير LeJOS NXJ الذي ينفذ شفرة مصدر Java.

## استخدام JCSP من لغات أخرى

JCSP في الأساس هو واجهة برمجة تطبيقات Java نقية (على الرغم من وجود بديل بحثي يعمل بامتداد C-CSP إلى JVM). على هذا النحو، فهو من حيث المبدأ مناسب بشكل واضح للتزامن في تطبيقات Scala وGroovy بالإضافة إلى تطبيقات Java.
فلذلك يمكن لـ JCSP توفير بديل لنموذج ممثل Scala. يستخدم JCSP الاتصال المتزامن ويستخدم الممثلون اتصالات مخزنة (غير متزامنة)، لكل منها مزاياها حسب الظروف المناسبة. يسمح JCSP لقنواته بالتخزين المؤقت بحيث يمكن بسهولة محاكاة نموذج الممثل؛ والعكس ليس صحيحا.

## انظر أيضا

* لغة جافا

## مراجع

* ↑ Abhijit Belapurkar (21 June 2005). "CSP for Java programmers". IBM developerWorks. Retrieved 2007-04-20.
* ↑ Peter Welch, Jeremy Martin (2000). "Formal Analysis of Concurrent Java Systems". Communicating Process Architectures 2000.
* ↑ Jon Kerridge, Alex Panayotopoulos, Patrick Lismore. "JCSPre: the Robot Edition to Control LEGO NXT Robots". Concurrent Systems Engineering Series Volume 66: Communicating Process Architectures 2008. IOS Press Books: 255–270. doi:10.3233/978-1-58603-907-3-255. Archived from the original on 2010-04-18.