Pertanyaan Aktivitas IO apa yang didukung manajer IO GHC?


Saya telah membaca tentang manajer IO baru di GHC, yang menggunakan pemberitahuan kejadian asynchronous dan menghindari blokir I / O untuk mencapai throughput yang tinggi.

Aktivitas IO mana yang memenuhi syarat untuk pengelolaan dengan kode IO asinkron yang baru? Membaca dan menulis file dan aktivitas jaringan? Akses basis data? Apakah ada jenis IO di mana manajer harus memblokir?


32
2017-12-15 04:30


asal


Jawaban:


Setiap deskripsi file yang dapat dikelola oleh epoll/kqueue memenuhi syarat. Perpustakaan yang menginginkan perawatan asynchronous I / O perlu bekerja sama dengan manajer I / O oleh

  • membuat deskriptor file non-blocking, dan
  • memanggil threadWaitRead dan threadWaitWrite fungsi dalam GHC.Conc sebelum mencoba kembali panggilan sistem yang sebelumnya dikembalikan EWOULDBLOCK.

Ini sudah dilakukan untuk Handle dan Socket jenis. Jika Anda menggunakan mis. pengikatan ke pustaka basis C, Anda akan mendapatkan perilaku pemblokiran karena pustaka tersebut tidak akan bekerja sama dengan pengelola I / O.


26
2017-12-16 07:55



Jawaban yang cukup memuaskan:

Jantung manajer IO GHC baru adalah kqueue()/epoll() lingkaran acara. Jadi saya mengharapkan apa pun yang dapat dibangun di atas ini agar memenuhi syarat - jika tidak sekarang, nanti. Secara khusus ini berarti:

  • File IO
  • Jaringan IO

Kode (saya melihatnya beberapa bulan yang lalu dan hal-hal yang mungkin telah berubah) juga berisi dukungan untuk mendaftar dan menjalankan timeout berbagai jenis melalui antrian prioritas (pencarian). Ini menunjukkan bahwa sebagian besar sleep-seperti panggilan juga bisa membonceng pada antarmuka.

Tentang Akses Database: tentu, Anda sering mengakses database melalui jaringan IO socket sehingga menelepon forkIO dan melakukan akses DB dalam utas yang terpisah harus dapat dilakukan, cepat, dan aman. Mengomunikasikan data kembali ke sisa aplikasi dapat dilakukan dengan salah satu cara konkurensi, Chan atau STM.TChan.

Saya rasa tidak ada jenis IO di mana manajer harus memblokirnya, tetapi saya dapat membayangkan bahwa beberapa perpustakaan mungkin akan mengabaikan manajer IO baru dan langsung menuju jugularis. Mereka tentu saja akan memblokir.


5
2017-12-15 15:08