Google Rangkaian patch pertama yang mengimplementasikan komponen-komponen yang diperlukan untuk mendukung model threading M:N telah dirilis ke dalam kernel Linux. Inisiatif Google ini terkait dengan pembukaan API yang sebelumnya dikembangkan secara tertutup. Kernel Linux yang menyediakan subsistem multithread ruang pengguna menggunakan model threading M:N. Subsistem ini digunakan di Google untuk mendukung layanan yang membutuhkan latensi minimal. Penjadwalan dan pengelolaan thread dilakukan sepenuhnya di ruang pengguna, sehingga secara signifikan mengurangi jumlah pergantian konteks dengan meminimalkan panggilan sistem.
Untuk mendukung pengoperasian subsistem ini, API SwitchTo diimplementasikan pada tingkat kernel Linux, yang menawarkan tiga operasi dasar: tunggu, lanjutkan, dan tukar. Sebuah operasi baru, FUTEX_SWAP, telah diusulkan untuk disertakan dalam kernel, melengkapi , yang menyediakan fondasi untuk membuat pustaka multithread di ruang pengguna. FUTEX_SWAP juga dapat digunakan untuk meneruskan pesan antartugas, mirip dengan RPC. Misalnya, saat ini, meneruskan pesan antartugas memerlukan setidaknya empat panggilan ke FUTEX_WAIT dan FUTEX_WAKE. Namun, penggunaan FUTEX_SWAP memungkinkan satu operasi yang 5-10 kali lebih cepat.
Saat ini, model aliran 1:1 dan N:1 terutama digunakan dalam praktik. Model 1:1 digunakan dalam (aliran POSIX) dan , dan menyiratkan pemetaan langsung dari utas ruang pengguna ke utas tingkat kernel (unit penjadwalan eksekusi). Model N:1 diimplementasikan dalam , memindahkan pengiriman thread ke ruang pengguna dan memungkinkan N thread ruang pengguna diikat ke satu thread kernel, sementara kernel tidak memiliki pengetahuan tentang thread pengguna.
Kelemahan utama model 1:1 adalah tingginya overhead peralihan konteks antara kernel dan ruang pengguna. Model N:1 memecahkan masalah ini, tetapi menciptakan masalah baru: karena utas kernel merupakan unit penjadwalan eksekusi yang tak terpisahkan, utas pengguna yang terikat pada satu utas kernel sistem operasi tidak dapat diskalakan di seluruh inti CPU dan akhirnya terikat pada satu inti CPU.
Model M:N merupakan model hibrida dan mengatasi semua kekurangan yang telah disebutkan dengan memetakan N utas ruang pengguna ke M utas kernel, yang mengurangi overhead peralihan konteks dan menyediakan skalabilitas di seluruh inti CPU. Kekurangan dari pendekatan ini adalah kompleksitas implementasi penjadwal utas ruang pengguna yang signifikan dan kebutuhan akan mekanisme untuk mengoordinasikan tindakan dengan penjadwal kernel.

Sumber: opennet.ru
