Pertanyaan Apa perbedaan antara event-driven dan asynchronous? Antara epoll dan AIO?


Event-driven dan asynchronous sering digunakan sebagai sinonim. Apakah ada perbedaan di antara keduanya?

Juga, apa perbedaannya epoll dan aio? Bagaimana mereka cocok bersama?

Terakhir, saya pernah membaca berkali-kali bahwa AIO di Linux rusak parah. Bagaimana tepatnya itu rusak?

Terima kasih.


32
2018-04-30 22:12


asal


Jawaban:


Peristiwa adalah salah satu paradigma untuk mencapai eksekusi asynchronous. Tetapi tidak semua sistem yang menggunakan acara asynchronous. Itu adalah tentang arti semantik dari keduanya - satu adalah entitas super dari yang lain.

epoll dan aio menggunakan metafora yang berbeda:

epoll adalah operasi pemblokiran (epoll_wait()) - Anda memblokir thread sampai beberapa peristiwa terjadi dan kemudian Anda mengirim acara ke prosedur / fungsi / cabang yang berbeda dalam kode Anda.

Dalam AIO Anda menyampaikan alamat fungsi panggilan balik Anda (rutin penyelesaian) ke sistem dan sistem memanggil fungsi Anda ketika sesuatu terjadi.

Masalah dengan AIO adalah bahwa kode fungsi panggilan balik Anda berjalan dari rangkaian sistem dan seterusnya di atas tumpukan sistem. Beberapa masalah dengan itu seperti yang Anda bayangkan.


17
2018-04-30 22:43



Mereka benar-benar berbeda.

Paradigma yang digerakkan oleh kejadian berarti bahwa objek yang disebut "peristiwa" dikirim ke program setiap kali terjadi sesuatu, tanpa "sesuatu" itu harus disurvei secara berkala untuk mengetahui apakah itu telah terjadi. "Peristiwa" itu mungkin terperangkap oleh program untuk melakukan beberapa tindakan (yaitu "pengendali") - baik sinkron atau asinkron.

Oleh karena itu, penanganan kejadian dapat sinkron atau asinkron. JavaScript, misalnya, menggunakan sistem kejadian sinkron.

Asynchronous berarti bahwa tindakan dapat terjadi independen dari arus eksekusi "utama" saat ini. Pikiran Anda, ya TIDAK berarti "paralel", atau "utas yang berbeda". Tindakan "asynchronous" mungkin sebenarnya berjalan di utas utama, memblokir arus eksekusi "utama" untuk sementara. Jadi jangan bingung "asynchronous" dengan "multi-threading".

Anda dapat mengatakan bahwa, secara teknis, operasi asynchronous secara otomatis berasumsi event - setidaknya "selesai", "kesalahan" atau "dibatalkan / dibatalkan" acara (satu atau lebih dari ini) dikirim ke penghasut operasi (atau yang mendasari O / S itu sendiri) untuk menandakan bahwa operasi telah berhenti . Jadi, async selalu bersifat event-driven, tetapi bukan sebaliknya.


17
2018-05-01 15:22



Event driven adalah satu utas dimana kejadian terdaftar untuk skenario tertentu. Ketika skenario itu dihadapi, peristiwa-peristiwa itu dipecat. Namun bahkan pada waktu itu masing-masing peristiwa dipecat secara berurutan. Tidak ada yang Asynchronous tentang itu. Node.js (webserver) menggunakan acara untuk menangani beberapa permintaan.

Asynchronous pada dasarnya adalah multitasking. Ini dapat memunculkan beberapa utas atau proses untuk menjalankan fungsi tertentu. Ini benar-benar berbeda dari event driven dalam arti bahwa setiap thread bersifat independen dan hampir tidak berinteraksi dengan thread utama dengan cara yang mudah responsif. Apache (webserver) menggunakan beberapa utas untuk menangani permintaan yang masuk.


2
2018-04-30 22:16