Saya menonton pembicaraan tentang penerapan Async IO di Rust dan Carl ini menyebutkan dua model potensial. Kesiapan dan Kelengkapan.
Model Kesiapan:
- Anda memberi tahu kernel yang ingin Anda baca dari soket
- lakukan hal-hal lain untuk sementara ...
- kernel memberi tahu Anda ketika soket siap
- Anda membaca (mengisi buffer)
- lakukan apapun yang kamu butuhkan
- bebaskan buffer (terjadi secara otomatis dengan Rust)
Model Penyelesaian:
- Anda mengalokasikan buffer untuk diisi kernel
- lakukan hal-hal lain untuk sementara ...
- kernel memberi tahu Anda ketika buffer telah terisi
- lakukan apa pun yang Anda perlukan dengan data
- bebaskan buffer
Dalam contoh Carl tentang menggunakan model kesiapan Anda dapat beralih dari soket yang siap mengisi dan membebaskan buffer global yang membuatnya tampak seperti itu akan menggunakan memori jauh lebih sedikit.
Sekarang asumsi saya:
Di bawah kap (dalam ruang kernel) ketika soket dikatakan "siap", data sudah ada. Ini telah masuk ke soket melalui jaringan (atau dari mana saja) dan OS memegang data.
Bukannya alokasi memori itu secara ajaib tidak terjadi dalam model kesiapan. Hanya saja OS itu mengambil abstraksi dari Anda. Dalam model Penyelesaian, OS meminta Anda untuk mengalokasikan memori sebelum data benar-benar masuk dan jelas apa yang terjadi.
Inilah versi saya dari Model Kesiapan:
- Anda memberi tahu kernel yang ingin Anda baca dari soket
- lakukan hal-hal lain untuk sementara ...
- PERUBAHAN: data masuk ke OS (suatu tempat di memori kernel)
- kernel memberi tahu Anda bahwa soketnya sudah siap
- Anda membaca (isi buffer lain secara terpisah dari buffer kernel abover (atau Anda mendapatkan pointer ke sana?))
- lakukan apapun yang kamu butuhkan
- bebaskan buffer (terjadi secara otomatis dengan Rust)
/ Asumsi saya
Saya kebetulan suka menjaga program pengguna-ruang kecil tapi saya hanya ingin beberapa klarifikasi tentang apa yang, pada kenyataannya, terjadi di sini. Saya tidak melihat bahwa satu model secara inheren akan menggunakan lebih sedikit memori atau mendukung tingkat IO bersamaan yang lebih tinggi. Saya ingin mendengar pemikiran dan penjelasan yang lebih dalam tentang ini.