- Artikel ini membahas tantangan dalam menggunakan Rust untuk perangkat lunak ruang pengguna dengan tingkat konkruensi yang besar.
- Model asinkron Rust dirancang untuk menangani dua konsep inti dalam komputasi modern: konkruensi dan paralelisme.
- Paralelisme melibatkan menjalankan kode secara bersamaan di beberapa CPU.
- Konkruensi melibatkan pemisahan masalah menjadi bagian-bagian independen yang dapat dijalankan tanpa bergantung pada urutan, atau dengan urutan parsial.
- Artikel ini menyoroti keterbatasan penggunaan banyak proses untuk konkruensi karena komunikasi antarproses yang mahal.
- Thread, yaitu proses yang berbagi memori yang sama, diajukan sebagai alternatif, tetapi dapat menimbulkan masalah kompleks seperti race condition dan deadlock.
- Makalah Tony Hoare tahun 1978, "Communicating Sequential Processes", mengusulkan penggunaan antrean atau channel agar thread dapat saling mengirim pesan, yang memberikan berbagai keuntungan seperti isolasi ala proses dan debugging yang lebih mudah.
- Pustaka standar Rust menyertakan channel di bawah
std::sync::mpsc::sync_channel.
- Namun, untuk masalah yang menuntut tingkat konkruensi tinggi, seperti server web yang terhubung ke puluhan ribu pengguna, thread mungkin tidak memadai.
- Untuk situasi seperti ini, Rust menggunakan model "async/await", di mana fungsi yang ditandai asinkron mengembalikan future atau promise, lalu dapat ditunggu untuk menghasilkan hasil.
- Terlepas dari kelebihannya, Rust asinkron memiliki tantangan, seperti kebutuhan untuk meyakinkan compiler bahwa semuanya akan baik-baik saja. Hal ini bisa lebih sulit dibanding menggunakan thread mentah.
- Penggunaan "atomic reference counting" atau Arc diajukan sebagai solusi, tetapi bukan obat mujarab karena dapat menimbulkan masalah yang mirip dengan yang ada pada garbage collector.
- Artikel ini ditutup dengan gagasan bahwa, meskipun Rust memiliki kekuatan di area lain, Rust mungkin bukan alat yang optimal untuk perangkat lunak ruang pengguna dengan konkruensi skala besar.
1 komentar
Komentar Hacker News
Arcdi Rust bukanlah sesuatu yang tidak diketahui, melainkan ditentukan oleh di mana dan bagaimana Anda memegangnya, dan menyarankan bahwa penulis sedang mencoba memaksakan model mental sebelumnya ke Rust.async-scopeduntuk menangkap sebagian besar bug yang kemungkinan akan muncul jika ditulis dalam C++ adalah kompromi yang masuk akal.