Acara adalah salah satu paradigma untuk mencapai eksekusi asinkron. Tetapi tidak semua sistem asinkron menggunakan acara. Itu tentang makna semantik dari keduanya - yang satu adalah entitas super dari yang lain.
epoll dan aio menggunakan metafora yang berbeda:
epoll adalah operasi pemblokiran (epoll_wait()
) - Anda memblokir utas hingga beberapa peristiwa terjadi dan kemudian Anda mengirimkan peristiwa tersebut ke berbagai prosedur/fungsi/cabang dalam kode Anda.
Di AIO, Anda meneruskan alamat fungsi panggilan balik (rutin penyelesaian) ke sistem dan sistem akan memanggil fungsi Anda saat terjadi sesuatu.
Masalah dengan AIO adalah kode fungsi panggilan balik Anda berjalan di utas sistem dan seterusnya di atas tumpukan sistem. Beberapa masalah dengan itu seperti yang dapat Anda bayangkan.
Mereka adalah hal yang sangat berbeda.
Paradigma yang digerakkan oleh peristiwa berarti bahwa objek yang disebut "peristiwa" dikirim ke program setiap kali sesuatu terjadi, tanpa "sesuatu" itu harus disurvei secara berkala untuk mengetahui apakah itu telah terjadi. "Peristiwa" itu mungkin dijebak oleh program untuk melakukan beberapa tindakan (yaitu "penangan") -- baik sinkron maupun asinkron.
Oleh karena itu, penanganan kejadian bisa sinkron atau asinkron. JavaScript, misalnya, menggunakan sistem peristiwa sinkron.
Asinkron berarti bahwa tindakan dapat terjadi terlepas dari aliran eksekusi "utama" saat ini. Pikiran Anda, itu TIDAK berarti "paralel", atau "utas berbeda". Tindakan "asinkron" sebenarnya dapat berjalan di utas utama, sementara itu memblokir aliran eksekusi "utama". Jadi jangan bingung antara "asynchronous" dengan "multi-threading".
Anda dapat mengatakan bahwa, secara teknis, operasi asinkron secara otomatis berasumsi eventing - setidaknya peristiwa "selesai", "salah", atau "dibatalkan/dibatalkan" (satu atau lebih dari ini) dikirim ke penghasut operasi (atau O/S yang mendasarinya sendiri) untuk menandakan bahwa operasi telah berhenti . Jadi, asinkron selalu digerakkan oleh peristiwa, tetapi tidak sebaliknya.
Didorong peristiwa adalah utas tunggal tempat peristiwa didaftarkan untuk skenario tertentu. Ketika skenario itu dihadapi, peristiwa itu dipicu. Namun bahkan pada saat itu masing-masing peristiwa dipicu secara berurutan. Tidak ada yang Asinkron tentang itu. Node.js (server web) menggunakan peristiwa untuk menangani banyak permintaan.
Asynchronous pada dasarnya multitasking. Itu dapat menelurkan banyak utas atau proses untuk menjalankan fungsi tertentu. Ini sama sekali berbeda dari event driven dalam arti bahwa setiap utas independen dan hampir tidak berinteraksi dengan utas utama dengan cara yang mudah responsif. Apache (server web) menggunakan banyak utas untuk menangani permintaan yang masuk.