Design: Wasmroutines

تم إنشاؤها على ٣٠ ديسمبر ٢٠١٩  ·  5تعليقات  ·  مصدر: WebAssembly/design

يركز اقتراح خيوط WebAssembly الحالية على تمكين البرنامج المترجم wasm لاستخدام مؤشرات ترابط النظام المتعددة. هذه ميزة مفيدة للغاية لمهام وحدة المعالجة المركزية المكثفة. ولكن هناك فئة كبيرة من المشاكل التي تكون مكثفة IO ويتم حلها بشكل أفضل عن طريق coroutines ذات الوزن الأخف بكثير من خيوط النظام. تعد الإضافة الأخيرة لـ Rust async-wait إلى لغة تدعم بالفعل تعدد مؤشرات الترابط مثالاً جيدًا على هذه الحاجة. تكمن مشكلة الانتظار غير المتزامن في أنه يتطلب طريقة مختلفة تمامًا لكتابة كود التطبيق بالإضافة إلى تقنيات تجميع مختلفة. من الجانب الآخر ، أحد الأسباب الرئيسية لشعبية Go هو goroutines التي تبدو وكأنها خيوط حقيقية للمطور بينما يتم تنفيذها على شكل coroutines بحلول وقت التشغيل.
أعتقد أن WebAssembly في وضع فريد لتحقيق ميزة Go threading model عمليًا لأي تطبيق متعدد مؤشرات الترابط يمكن تجميعه إلى wasm. الفكرة هي أن البرنامج المترجم لا يحتاج إلى التغيير للاستفادة من الخيوط الخضراء ، يصبح هذا هو اختيار المضيف حول كيفية تنفيذه.
ميزة أخرى مهمة في WebAssembly هي التنفيذ الحتمي. مع الخيوط الخضراء ، يجب أن يكون من السهل تنفيذ وضع التنفيذ الحتمي للأهداف متعددة مؤشرات الترابط.
اسم القش للميزة هو _Wasmroutines_.

لقد وجدت بعض المشكلات المتعلقة بـ "سلاسل الوصلات الأصلية" مثل https://github.com/WebAssembly/design/issues/126 و https://github.com/WebAssembly/design/issues/1252 ولكن يبدو أنها كذلك يعتبر شيئًا قد يتم الحصول عليه في النهاية ، لكنه نظري جدًا في هذه المرحلة.

أعتقد أن _ تنفيذ مؤشر ترابط النظام الفردي_ يمكن إجراؤه بجهد صغير نسبيًا (على سبيل المثال ، يمكن أن يستخدم الذاكرة الخطية العادية) وسيوفر الكثير من القيمة (مثل تنفيذ أي برنامج متعدد مؤشرات الترابط دون تعديل) يستحق الحصول عليه كتصميم منفصل اقتراح.

التعليق الأكثر فائدة

يوجد مقطع فيديو يعرض فيه rossberg التصميم المقترح للاستمرار (مذكور بواسطةlukewagner).

https://youtu.be/pq-Pa2Fj4nE؟t=3231

ال 5 كومينتر

قد تكون مهتمًا بـ Asyncify ، وهي أداة تحويل التعليمات البرمجية التي يمكن استخدامها لإيقاف التنفيذ مؤقتًا واستئنافه أو تبديل المجموعات في WebAssembly دون الحاجة إلى أي ميزات WebAssembly الجديدة. هذا الحل له عبء ، وأعتقد أن هناك خططًا لاقتراح آلية جديدة لتبديل المكدس باستخدام معالجات التأثير الجبري ، والتي هي في الأساس مجرد استثناءات قابلة للاستئناف. تم تصميم اقتراح الاستثناءات مع وضع هذا الاتجاه المستقبلي في الاعتبار.

شكراtlively. Asyncify يبدو وكأنه حل مؤقت رائع لمشكلتي. سأحاول وضع نموذج أولي فوقه. من الناحية المثالية ، أود تنفيذ أي برنامج WebAssembly متعدد مؤشرات الترابط دون أي تعديل باستخدام الميزات التي يوفرها المضيف فقط.

mfateev أعتقد أنك على حق ؛ سيكون هناك قيمة كبيرة في دعم coroutines. كانت هناك بالفعل بعض المناقشات الأولية حول توحيد معالجة الاستثناءات و coroutines في إطار التأثيرات الجبرية. تمت مناقشة هذا في اقتراح معالجة الاستثناءات القديم ، وأعتقد أن rossberg لديها بعض التفكير التصميمي الأحدث المتوافق مع اقتراح معالجة الاستثناءات الجديد.

يوجد مقطع فيديو يعرض فيه rossberg التصميم المقترح للاستمرار (مذكور بواسطةlukewagner).

https://youtu.be/pq-Pa2Fj4nE؟t=3231

شكرا على الفيديو. "تبديل المكدس" هو تجريد قوي للغاية من شأنه أن يتيح عددًا كبيرًا من حالات الاستخدام. نتطلع إلى أن يتم دعمها.

تختلف زاويتي إلى حد ما في اقتراح عدم وجود ميزات جديدة في رمز bytecode. أنا أبحث في توفير التنفيذ الحتمي لأي كود متعدد مؤشرات الترابط يستخدم atomic.wait / notify والعمليات الذرية الأخرى. أعتقد أنه يمكننا تحديد وضع تنفيذ مضيف خاص يعتمد أساسًا على coroutine ، ولكنه يبدو مثل وقت تشغيل متعدد الخيوط لتطبيق Web Assembly.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

cretz picture cretz  ·  5تعليقات

Artur-A picture Artur-A  ·  3تعليقات

bobOnGitHub picture bobOnGitHub  ·  6تعليقات

void4 picture void4  ·  5تعليقات

aaabbbcccddd00001111 picture aaabbbcccddd00001111  ·  3تعليقات