I/O Multiplexing Model
I/O multiplexing merupakan kapabilitas untuk memberi instruksi ke kernel bahwa kita ingin diberi notifikasi ketika satu atau beberapa kondisi I/O telah tercapai. Beberapa scenario dimana I/O multiplexing dipakai :
- Ketika klient sedang meng-handling beberapa deskriptor sekaligus
- Ketika klient menghandle beberapa socket bersamaan
- Ketika TCP server menghandle listening dan socket ang terkoneksi
- Ketika server menghandle TCP dan UDP bersamaan
- Ketika server menghandle lebih dari satu service dan protocol secara bersamaan
Terdapat 5 model I/O
- Blocking I/O
- Nonblocking I/O
- I/O Multiplexing
- Signal Driven I/O
- Asynchronous I/O
Pada semua metode input terdapat 2 phase
- Menunggu data siap
- Mencopy data dari kernel ke process
Blocking I/O Model
Untuk model ini process di block dari saat aplikasi melakukan systemcall recvfrom sampai datagram telah tercopy ke buffer aplikasi
Nonblocking I/O Model
Untuk Nonblocking I/O model kita menginformasikan kernel bahwa , jika sebuah I/O request akan membuat process sleep , kernel akan meng-return sebuah error daripada melakukan blocking process , di gambar diatas dapat dilihat bahwa applikasi melakukan 2 systemcall yang mendapatkan sebuah respons error message, pada systemcall ketiga datagram telah siap dan kernel tidak meng-return sebuah error message.
Multiplexing I/O model
Model ini mengunakan function “select” untuk memberi notifikasi ketika sebuah descriptor telah berstatus siap, dengan mengunakan “select” kita dapat menuggu lebih dari satu descriptor untuk berstatus siap sebelum mencopy data ke buffer applikasi, ini merupakan kelebihan utama dari I/O multiplexing.
Signal Driven I/O model
pada model ini kita pertama mengenable signal driven I/O untuk socket dan menginstall sebuah signal handler mengunakan systemcall sygaction, return dari systemcall ini bersifat instan dan process berlanjut tanpa di block , ketika sebuah datagram siap diread signal SIGIO akan dikirim untuk process , selanjutnyakita dapat membaca datagram dari signal handler dengan mengcall recvfrom dan memberitahu loop utama bahwa data siap diprocess atau kita dapat memberitahu loop utama dan membiarkanya membaca datagram.
Asynchronous I/O model
Model ini bekerja dengan menginstruksi kernel untuk memulai operasi dan mengnotifikasi process saat operasi tersebut selesai.
Referensi :
https://www.thedailyprogrammer.com/2016/09/network-programming-io-multiplexing.html
Christopher Daryl Wunan, Bayu Kanigoro