Design: rutinitas

Dibuat pada 30 Des 2019  ·  5Komentar  ·  Sumber: WebAssembly/design

Proposal utas WebAssembly yang ada berfokus pada pengaktifan program yang dikompilasi wasm untuk memanfaatkan beberapa utas sistem. Ini adalah fitur yang sangat berguna untuk tugas-tugas intensif CPU. Tetapi ada kelas besar masalah yang intensif IO dan lebih baik diselesaikan dengan coroutine yang jauh lebih ringan daripada utas sistem. Penambahan Rust async-wait baru-baru ini ke bahasa yang sudah mendukung multithreading adalah contoh yang baik dari kebutuhan tersebut. Masalah dengan async-await adalah membutuhkan cara yang sama sekali berbeda untuk menulis kode aplikasi serta teknik kompilasi yang berbeda. Dari sisi lain, salah satu alasan utama popularitas Go adalah goroutine yang terlihat seperti utas nyata bagi pengembang saat dijalankan sebagai coroutine oleh runtime.
Saya percaya bahwa WebAssembly diposisikan secara unik untuk membawa keuntungan dari model threading Go ke hampir semua aplikasi multithreaded yang dapat dikompilasi ke wasm. Idenya adalah bahwa program yang dikompilasi tidak perlu diubah untuk memanfaatkan utas hijau, ini menjadi pilihan host tentang cara menjalankannya.
Fitur penting lainnya dari WebAssembly adalah eksekusi deterministik. Dengan utas hijau, penerapan mode eksekusi deterministik untuk target multiutas harus mudah.
Nama strawman untuk fitur ini adalah _Wasmroutines_.

Saya menemukan beberapa masalah yang terkait dengan "utas wasm asli" seperti https://github.com/WebAssembly/design/issues/126 dan https://github.com/WebAssembly/design/issues/1252 tetapi sepertinya memang demikian dianggap sebagai sesuatu yang mungkin didapat pada akhirnya, tetapi cukup teoretis pada saat ini.

Saya percaya bahwa _implementasi utas sistem tunggal_ dapat dilakukan dengan upaya yang relatif kecil (misalnya dapat menggunakan memori linier normal) dan akan memberikan banyak nilai (seperti menjalankan program multithread tanpa modifikasi) yang layak dimiliki sebagai desain terpisah usul.

Komentar yang paling membantu

Ada video di mana @rossberg menyajikan desain yang diusulkan untuk kelanjutan (disebutkan oleh @lukewagner).

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

Semua 5 komentar

Anda mungkin tertarik dengan Asyncify , yang merupakan alat transformasi kode yang dapat digunakan untuk menjeda dan melanjutkan eksekusi atau mengalihkan tumpukan di WebAssembly tanpa memerlukan fitur WebAssembly baru. Solusi ini memiliki overhead, dan saya yakin ada rencana untuk mengusulkan mekanisme baru untuk peralihan tumpukan menggunakan penangan efek aljabar, yang pada dasarnya hanyalah pengecualian yang dapat dilanjutkan. Proposal pengecualian telah dirancang dengan mempertimbangkan arah masa depan ini.

Terima kasih @tlively. Asyncify sepertinya solusi sementara yang keren untuk masalah saya. Saya akan mencoba membuat prototipe di atasnya. Idealnya saya ingin menjalankan program WebAssembly multithreaded tanpa modifikasi apa pun hanya dengan menggunakan fitur yang disediakan oleh tuan rumah.

@mfateev Saya pikir Anda benar; akan ada nilai signifikan dalam mendukung coroutine. Sudah ada beberapa diskusi awal tentang menyatukan penanganan pengecualian dan coroutine dalam kerangka efek aljabar. Ini dibahas dalam proposal penanganan pengecualian lama, dan saya pikir @rossberg memiliki beberapa pemikiran desain baru yang kompatibel dengan proposal penanganan pengecualian baru.

Ada video di mana @rossberg menyajikan desain yang diusulkan untuk kelanjutan (disebutkan oleh @lukewagner).

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

Terima kasih untuk videonya. "Stack switching" adalah abstraksi yang sangat kuat yang memungkinkan banyak kasus penggunaan. Menantikan untuk didukung.

Sudut pandang saya entah bagaimana berbeda dalam mengusulkan tidak ada fitur baru dalam bytecode wasm. Saya sedang mencari untuk menyediakan eksekusi deterministik untuk kode multithreaded apa pun yang menggunakan atomic.wait/notify dan operasi atom lainnya. Saya percaya bahwa kita dapat menentukan mode eksekusi host khusus yang pada dasarnya berbasis coroutine, tetapi terlihat seperti runtime multhreaded ke aplikasi Majelis Web.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

beriberikix picture beriberikix  ·  7Komentar

void4 picture void4  ·  5Komentar

konsoletyper picture konsoletyper  ·  6Komentar

JimmyVV picture JimmyVV  ·  4Komentar

spidoche picture spidoche  ·  4Komentar