GNU/Linux >> Belajar Linux >  >> Linux

Apa perbedaan antara event-driven dan asinkron? Antara epoll dan AIO?

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.


Linux
  1. Apa perbedaan antara Redhat dan centOS?

  2. Apa perbedaan antara mutex dan bagian kritis?

  3. Apa perbedaan antara strtok_r dan strtok_s di C?

  1. Apa perbedaan antara fsck dan e2fsck?

  2. Apa perbedaan antara `su -` dan` su --login`?

  3. Apa perbedaan antara $(CC) dan $CC?

  1. Apa perbedaan antara InnoDB dan MyISAM?

  2. Apa Perbedaan Antara Git Switch dan Checkout?

  3. Apa perbedaan antara rute dan rute ip?