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