برمجة تدفق البيانات

في برمجة الحاسوب ، تُعدّ برمجة تدفق البيانات نموذجًا برمجيًا يُصوّر البرنامج على شكل رسم بياني مُوجّه للبيانات المتدفقة بين العمليات، مُطبّقًا بذلك مبادئ وبنية تدفق البيانات . [ 1 ] تشترك لغات برمجة تدفق البيانات في بعض خصائص اللغات الوظيفية ، وقد طُوّرت عمومًا لنقل بعض المفاهيم الوظيفية إلى لغة أكثر ملاءمة للمعالجة العددية. يستخدم بعض المؤلفين مصطلح "تيار البيانات" بدلًا من "تدفق البيانات " لتجنب الخلط بينه وبين الحوسبة القائمة على تدفق البيانات أو بنية تدفق البيانات ، والتي تستند إلى نموذج الآلة غير الحتمية. وقد كان جاك دينيس وطلابه في معهد ماساتشوستس للتكنولوجيا (MIT) رواد برمجة تدفق البيانات في ستينيات القرن الماضي.

الاعتبارات

تقليديًا، يُصمَّم البرنامج كسلسلة من العمليات التي تحدث بترتيب محدد؛ ويُشار إلى ذلك بالبرمجة التسلسلية، [ 2 ] : ص. 3 ، أو الإجرائية، [ 3 ] أو برمجة التحكم في التدفق [ 3 ] (مما يدل على أن البرنامج يختار مسارًا محددًا)، أو البرمجة الإجرائية . يركز البرنامج على الأوامر، بما يتماشى مع رؤية فون نيومان [ 2 ] : ص. 3 للبرمجة التسلسلية، حيث تكون البيانات عادةً "في حالة سكون". [ 3 ] : ص. 7

على النقيض من ذلك، تركز برمجة تدفق البيانات على حركة البيانات، وتُصمّم البرامج كسلسلة من الاتصالات. تربط المدخلات والمخرجات المُحددة بوضوح العمليات، التي تعمل كصناديق سوداء . [ 3 ] : ص 2. تبدأ العملية بالعمل بمجرد أن تصبح جميع مدخلاتها صالحة. [ 4 ] وبالتالي، فإن لغات تدفق البيانات متوازية بطبيعتها، ويمكنها العمل بكفاءة في الأنظمة الكبيرة واللامركزية. [ 2 ] : ص 3 [ 5 ] [ 6 ]

ولاية

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

بينما يُمكن تخيّل البرنامج التسلسلي كعامل واحد ينتقل بين المهام (العمليات)، فإنّ برنامج تدفق البيانات أشبه بسلسلة من العمال على خط تجميع ، حيث يقوم كل منهم بمهمة محددة كلما توفرت المواد. ولأنّ العمليات لا تُعنى إلا بتوافر مدخلات البيانات، فلا توجد حالة خفية لتتبعها، وتكون جميعها "جاهزة" في الوقت نفسه.

التمثيل

تُعرض برامج تدفق البيانات بطرق مختلفة. عادةً ما يُعرض البرنامج التقليدي كسلسلة من التعليمات النصية، وهو وصف مناسب لنظام تسلسلي ينقل البيانات بين أدوات صغيرة ذات غرض واحد، تستقبل البيانات وتعالجها ثم تعيدها. تبدأ برامج تدفق البيانات بمدخلات، ربما تكون معلمات سطر الأوامر ، وتوضح كيفية استخدام هذه البيانات وتعديلها. يكون تدفق البيانات واضحًا، وغالبًا ما يُصوَّر بصريًا على شكل خط أو أنبوب.

من حيث التشفير، يمكن تنفيذ برنامج تدفق البيانات كجدول تجزئة ، حيث تُستخدم المدخلات المُعرَّفة بشكل فريد كمفاتيح للبحث عن مؤشرات التعليمات. عند اكتمال أي عملية، يفحص البرنامج قائمة العمليات حتى يعثر على أول عملية تكون فيها جميع المدخلات صالحة، ثم يُنفذها. عند انتهاء تلك العملية، تُخرج عادةً بيانات، مما يجعل عملية أخرى صالحة.

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

تحديثات تدريجية

استخدمت بعض مكتبات تدفق البيانات الحديثة، مثل Differential / Timely Dataflow، الحوسبة التزايدية لمعالجة البيانات بكفاءة أكبر. [ 1 ] [ 7 ] [ 8 ]

تاريخ

كانت لغة BLODI (مخطط الكتلة ) من اللغات الرائدة في مجال تدفق البيانات، وقد نشرها جون لاري كيلي الابن، وكارول لوخبوم، وفيكتور أ. فيسوتسكي عام 1961 لتحديد أنظمة البيانات المأخوذة عينات منها . [ 9 ] تم تجميع مواصفات BLODI للوحدات الوظيفية (المضخمات، والجامعات، وخطوط التأخير، وما إلى ذلك) ووصلاتها البينية في حلقة واحدة تقوم بتحديث النظام بأكمله لمدة نبضة ساعة واحدة.

في أطروحة دكتوراه عام 1966 بعنوان "المواصفات الرسومية المباشرة لإجراءات الحاسوب " [ 10 ] ، ابتكر بيرت ساذرلاند أحد أوائل أطر برمجة تدفق البيانات الرسومية لتسهيل البرمجة المتوازية. وقد طُوّرت لغات تدفق البيانات اللاحقة في مختبرات الحواسيب العملاقة . لغة POGOL، وهي لغة تقليدية لمعالجة البيانات طُوّرت في وكالة الأمن القومي الأمريكية ، قامت بتجميع تطبيقات واسعة النطاق تتألف من عمليات متعددة بين الملفات، مثل الدمج والاختيار والتلخيص والتحويل، إلى شفرة برمجية فعّالة قلّلت من الحاجة إلى إنشاء ملفات وسيطة أو الكتابة إليها قدر الإمكان. [ 11 ] أما لغة SISAL ، وهي لغة شائعة لتدفق البيانات طُوّرت في مختبر لورانس ليفرمور الوطني ، فتشبه معظم لغات البرمجة القائمة على التعليمات، ولكن يجب تعيين قيم المتغيرات مرة واحدة فقط . يُمكّن هذا المُجمّع من تحديد المدخلات والمخرجات بسهولة. وقد طُوّرت عدة لغات مشتقة من SISAL، منها SAC ( لغة C ذات التعيين الفردي) ، التي تسعى إلى البقاء قريبة قدر الإمكان من لغة البرمجة C الشائعة .

قامت البحرية الأمريكية بتمويل تطوير تدوين الرسم البياني لمعالجة الإشارات (SPGN) ونظام ACOS بدءًا من أوائل الثمانينيات. ويُستخدم هذا النظام في عدد من المنصات الميدانية اليوم. [ 12 ]

يُعدّ مفهوم Prograph أكثر جذرية ، حيث تُبنى البرامج على شكل رسوم بيانية على الشاشة، وتُستبدل المتغيرات تمامًا بخطوط تربط المدخلات بالمخرجات. كُتب Prograph في الأصل على جهاز ماكنتوش ، الذي ظلّ أحادي المعالج حتى طرح جهاز DayStar Genesis MP في عام 1996.

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

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

اللغات

تشمل لغات برمجة تدفق البيانات ما يلي:

المكتبات

  • أباتشي بيم : مجموعة أدوات تطوير برمجية (SDK) بلغة جافا/سكالا توحد معالجة البث (والمعالجة الدفعية) مع دعم العديد من محركات التنفيذ (أباتشي سبارك، أباتشي فلينك، جوجل داتا فلو، إلخ).
  • أباتشي فلينك : مكتبة جافا/سكالا تسمح بتشغيل عمليات الحساب المتدفقة (والدفعية) على مجموعة موزعة من هادوب (أو غيرها).
  • أباتشي سبارك
  • SystemC : مكتبة للغة C++، موجهة بشكل أساسي لتصميم الأجهزة.
  • TensorFlow : مكتبة للتعلم الآلي تعتمد على برمجة تدفق البيانات.

انظر أيضاً

مراجع

  1. 1 2 شوارزكوف، مالتي (7 مارس 2020). "الفائدة الملحوظة لحوسبة تدفق البيانات" . ACM SIGOPS . تم الاسترجاع في 31 يوليو 2022 .
  2. 1 2 3 جونستون، ويسلي م.؛ جيه آر بول حنا؛ ريتشارد جيه ميلار (مارس 2004). "تطورات في لغات برمجة تدفق البيانات" (ملف PDF) . مجلة ACM Computing Surveys . 36 : 1-34 . doi : 10.1145/1013208.1013209 . S2CID 5257722. تاريخ الاسترجاع: 15 أغسطس 2013 . 
  3. 1 2 3 4 5 وادج، ويليام دبليو؛ إدوارد أ. آش كروفت (1985). لوسيد، لغة برمجة تدفق البيانات ( طبعة مصورة). أكاديميا برس. ISBN  9780127296500تم الاطلاع عليه بتاريخ 15 أغسطس 2013 .
  4. 1 2 "أساسيات برمجة تدفق البيانات" . البدء باستخدام منتجات NI . شركة ناشونال إنسترومنتس . تم الاطلاع عليه بتاريخ 15 أغسطس 2013 .
  5. هارتر، ريتشارد. "لغات تدفق البيانات والبرمجة - الجزء الأول" . عالم ريتشارد هارتر . مؤرشف من الأصل في 8 ديسمبر 2015. تم الاطلاع عليه في 15 أغسطس 2013 .
  6. "لماذا تُعدّ لغات برمجة تدفق البيانات مثالية لبرمجة الأجهزة المتوازية؟" . سلسلة أوراق عمل أساسيات برمجة المعالجات متعددة النوى . شركة ناشيونال إنسترومنتس . تاريخ الاطلاع: 15 أغسطس 2013 .
  7. ماكشيري، فرانك؛ موراي، ديريك؛ إسحاق، ريبيكا؛ إيسارد، مايكل (5 يناير 2013). "تدفق البيانات التفاضلي" . مايكروسوفت . تم الاسترجاع في 31 يوليو 2022 .
  8. "تدفق البيانات التفاضلي" . تدفق البيانات في الوقت المناسب. 30 يوليو 2022. تم الاسترجاع في 31 يوليو 2022 .
  9. ↑ جون ل. كيلي الابن؛ كارول لوخبوم؛ ف. أ . فيسوتسكي (1961). "مترجم مخططات الكتل". مجلة بيل سيستم التقنية 40 (3): 669-678 . رمز Bibcode : 1961BSTJ...40..669K . doi : 10.1002/j.1538-7305.1961.tb03236.x .
  10. ساذرلاند، ويليام روبرت (يناير 1966). المواصفات الرسومية عبر الإنترنت لإجراءات الحاسوب (أطروحة دكتوراه). معهد ماساتشوستس للتكنولوجيا . hdl : 1721.1/13474 . تاريخ الاسترجاع : 25 أغسطس 2022 .
  11. غلوريا لامبرت (1973). "معالجة الملفات واسعة النطاق: POGOL". POPL '73: وقائع الندوة السنوية الأولى لجمعية ACM SIGACT-SIGPLAN حول مبادئ لغات البرمجة . ACM . الصفحات 226-234 . 
  12. معالجة البيانات الصوتية تحت الماء، واي تي تشان