- Artikel ini membahas perdebatan di komunitas Rust tentang penggunaan eksekutor multithread, yaitu runtime async yang melakukan work-stealing untuk mendistribusikan tugas secara seimbang.
- Sebagian pengguna Rust mendorong arsitektur alternatif bernama "thread-per-core", yang menjanjikan kinerja lebih baik dan implementasi yang lebih mudah.
- Istilah "thread-per-core" bersifat menyesatkan. Semua eksekutor multithread pada dasarnya adalah thread-per-core, membuat satu thread OS per inti dan menjadwalkan tugas di atas thread-thread tersebut.
- Thread-per-core menggabungkan tiga gagasan: menangani konkurensi di ruang pengguna, membuat I/O menjadi asinkron untuk menghindari pemblokiran thread, dan mempartisi data antar inti CPU untuk menghilangkan biaya sinkronisasi serta perpindahan data antar cache CPU.
- Perdebatan ini terutama berfokus pada poin ketiga, dan dengan async Rust, dua kebutuhan pertama dapat dipenuhi.
- Dalam arsitektur thread-per-core, ada dua optimasi yang bisa dilakukan: mencuri pekerjaan antar thread, dan berbagi status sesedikit mungkin.
- Work-stealing meningkatkan tail latency dengan memastikan semua thread selalu bisa bekerja, tetapi sulit diimplementasikan dan dapat menimbulkan biaya sinkronisasi serta cache miss.
- Share-nothing meningkatkan tail latency dengan menjaga data tetap berada di cache yang lebih cepat milik satu inti CPU, tetapi bisa sulit diterapkan pada aplikasi kompleks yang perlu mengubah status di beberapa partisi.
- Artikel ini mengusulkan bahwa dalam sistem yang menggunakan status bersama, work-stealing dapat meningkatkan utilisasi CPU saat berada di bawah beban.
1 komentar
Komentar Hacker News
Send + Sync + 'static, yang oleh sebagian orang dirasa memberatkan.asyncdianggap sebagai optimisasi prematur untuk banyak program Rust.