Terminologi
acara : Suatu jenis hal yang bisa terjadi.
event firing : Kejadian spesifik dari suatu acara; sebuah peristiwa terjadi.
pendengar acara : Sesuatu yang terlihat untuk pemecatan acara.
pengendali kejadian : Sesuatu yang terjadi ketika pendengar acara mendeteksi peristiwa yang terjadi.
pelanggan acara : Sebuah respons yang seharusnya dipanggil oleh pawang acara.
Definisi-definisi ini tidak tergantung pada implementasi, sehingga mereka dapat diimplementasikan dengan cara yang berbeda.
Beberapa istilah ini umumnya disalahartikan sebagai sinonim karena sering kali tidak ada kebutuhan bagi pengguna untuk membedakannya.
Skenario umum
Acara pemrograman logika.
The event adalah ketika beberapa metode dipanggil.
Suatu peristiwa penembakan adalah panggilan khusus untuk metode itu.
The pendengar acara adalah hook dalam metode peristiwa yang disebut pada setiap acara penembakan yang memanggil event handler.
The event handler panggilan koleksi pelanggan acara.
The event pelanggan (s) melakukan tindakan apa pun (s) sistem berarti terjadi dalam menanggapi terjadinya acara.
Peristiwa eksternal.
The event adalah terjadinya eksternal yang dapat disimpulkan dari diamati.
Suatu peristiwa penembakan adalah ketika peristiwa eksternal itu dapat dikenali telah terjadi.
The pendengar acara entah bagaimana mendeteksi acara pemecatan, sering dengan polling yang diamati (s), maka panggilan event handler pada mendeteksi sebuah acara menembak.
The event handler panggilan koleksi pelanggan acara.
The event pelanggan (s) melakukan tindakan apa pun (s) sistem berarti terjadi dalam menanggapi terjadinya acara.
Polling vs. memasukkan kait ke dalam mekanisme pembakaran acara
Maksud yang dibuat oleh orang lain adalah bahwa pemungutan suara seringkali tidak perlu. Ini karena pendengar acara dapat diimplementasikan dengan membuat acara pembakaran secara otomatis memanggil event handler, yang sering kali merupakan cara paling efisien untuk mengimplementasikan hal-hal ketika peristiwa tersebut merupakan kejadian tingkat sistem.
Dengan analogi, Anda tidak perlu memeriksa kotak surat Anda setiap hari jika pekerja pos mengetuk pintu Anda dan menyerahkannya langsung kepada Anda.
Namun, pendengar acara juga dapat bekerja dengan polling. Polling tidak perlu harus memeriksa nilai tertentu atau dapat diamati lainnya; itu bisa lebih kompleks. Tetapi, secara keseluruhan, titik pemungutan suara adalah untuk menyimpulkan ketika beberapa peristiwa telah terjadi sehingga dapat ditanggapi.
Dengan analogi, Anda harus memeriksa kotak surat Anda setiap hari ketika petugas pos hanya memasukkan surat ke dalamnya. Anda tidak perlu melakukan pekerjaan pemungutan suara ini jika Anda bisa menginstruksikan pekerja pos untuk mengetuk pintu Anda, tetapi itu seringkali tidak mungkin.
Logika peristiwa rantai
Dalam banyak bahasa pemrograman, Anda dapat menulis acara yang baru dipanggil ketika tombol pada keyboard ditekan atau pada waktu tertentu. Meskipun ini adalah peristiwa eksternal, Anda tidak perlu memilihnya. Mengapa?
Itu karena sistem operasi untuk Anda. Misalnya, Windows memeriksa hal-hal seperti perubahan kondisi keyboard, dan jika terdeteksi, itu akan memanggil pelanggan acara. Jadi, ketika Anda berlangganan acara pers keyboard, Anda sebenarnya berlangganan acara yang juga merupakan pelanggan acara yang melakukan polling.
Dengan analogi, katakan bahwa Anda tinggal di kompleks apartemen dan seorang pekerja pos mengirim surat ke daerah penerimaan surat bersama. Kemudian, pekerja seperti sistem operasi dapat memeriksa surat itu untuk semua orang, mengirimkan surat ke apartemen orang-orang yang menerima sesuatu. Ini membuat semua orang kesulitan untuk melakukan polling di area penerimaan surat.
Intuisi saya akan mengasumsikan bahwa pendengar acara terus-menerus memeriksa apakah acara telah dipecat, artinya, dalam skenario saya, itu tidak akan berbeda dengan memeriksa setiap frame jika acara telah dipecat.
Berdasarkan diskusi di kelas, tampaknya pendengar acara bekerja dengan cara yang berbeda.
Bagaimana cara kerja pendengar acara?
Seperti yang telah Anda duga, suatu acara dapat bekerja melalui pemungutan suara. Dan jika suatu peristiwa entah bagaimana terkait dengan kejadian eksternal, misalnya tombol keyboard ditekan, maka pemungutan suara memang harus terjadi di beberapa titik.
Benar juga bahwa acara tidak perlu melibatkan pemilihan. Misalnya, jika acara adalah ketika sebuah tombol ditekan, maka pendengar acara tombol tersebut adalah metode yang dapat dipanggil kerangka kerja GUI ketika menentukan bahwa klik-mouse menekan tombol. Dalam hal ini, polling masih harus terjadi agar klik mouse terdeteksi, tetapi mouse-listener adalah elemen yang lebih pasif yang terhubung ke mekanisme polling primitif melalui event-chaining.
Pembaruan: Pada jajak pendapat perangkat keras tingkat rendah
Ternyata perangkat USB dan protokol komunikasi modern lainnya memiliki seperangkat protokol yang mirip jaringan untuk interaksi, memungkinkan perangkat I / O termasuk keyboard dan mouse untuk terlibat dalam topologi ad hoc .
Menariknya, " interupsi " adalah hal yang cukup penting, sinkron, sehingga mereka tidak menangani topologi jaringan ad hoc . Untuk memperbaikinya, " interupsi " telah digeneralisasi menjadi paket prioritas tinggi asinkron yang disebut " transaksi interupsi " (dalam konteks USB) atau " interupsi sinyal-pesan " (dalam konteks PCI). Protokol ini dijelaskan dalam spesifikasi USB:
- " Gambar 8-31. Mesin Negara Host Transaksi Massal / Kontrol / Interupsi OUT " dalam "Spesifikasi Universal Serial Bus, Revisi 2.0" , dicetak-halaman-222; PDF-halaman-250 (2000-04-27)
Intinya tampaknya bahwa perangkat I / O dan komponen komunikasi (seperti hub USB) pada dasarnya bertindak seperti perangkat jaringan. Jadi, mereka mengirim pesan, yang membutuhkan polling port mereka dan semacamnya. Ini mengurangi kebutuhan akan jalur perangkat keras khusus.
Sistem operasi seperti Windows tampaknya menangani proses pemungutan suara itu sendiri, misalnya seperti yang dijelaskan dalam dokumentasi MSDN untuk USB_ENDPOINT_DESCRIPTOR
's yang menggambarkan bagaimana mengontrol seberapa sering Windows memilih pengontrol host USB untuk pesan interupsi / isokron:
The bInterval
nilai berisi interval polling untuk endpoint interupsi dan isochronous. Untuk jenis titik akhir lainnya, nilai ini harus diabaikan. Nilai ini mencerminkan konfigurasi perangkat dalam firmware. Driver tidak dapat mengubahnya.
Interval pemungutan suara, bersama-sama dengan kecepatan perangkat dan jenis pengontrol host, menentukan frekuensi pengemudi harus memulai interupsi atau transfer isochronous. Nilai dalam bInterval
tidak mewakili jumlah waktu yang tetap. Ini adalah nilai relatif, dan frekuensi polling yang sebenarnya juga akan tergantung pada apakah perangkat dan pengontrol host USB beroperasi pada kecepatan rendah, penuh atau tinggi.
- "USB_ENDPOINT_DESCRIPTOR struktur" , Pusat Pengembangan Perangkat Keras, Microsoft
Protokol koneksi monitor yang lebih baru seperti DisplayPort tampaknya melakukan hal yang sama:
Multi-Stream Transport (MST)
-Slide # 14 dari "Ikhtisar DisplayPortTM Ver.1.2" (2010-12-06)
Abstraksi ini memungkinkan untuk beberapa fitur yang rapi, seperti menjalankan 3 monitor dari satu koneksi:
DisplayPort Multi-Stream Transport juga memungkinkan menghubungkan tiga perangkat atau lebih secara bersamaan tetapi sebaliknya, konfigurasi yang kurang berorientasi "konsumen": secara simultan menggerakkan banyak tampilan dari satu port output.
- "DisplayPort" , Wikipedia
Secara konseptual, titik untuk mengambil dari ini adalah bahwa mekanisme pemungutan suara memungkinkan untuk komunikasi serial yang lebih umum, yang luar biasa ketika Anda menginginkan fungsionalitas yang lebih umum. Jadi, perangkat keras dan OS melakukan banyak polling untuk sistem logis. Kemudian, konsumen yang berlangganan acara dapat menikmati detail yang ditangani untuk mereka oleh sistem tingkat bawah, tanpa harus menulis protokol pemungutan suara / penyampaian pesan mereka sendiri.
Pada akhirnya, peristiwa-peristiwa seperti penekanan tombol tampaknya melalui serangkaian peristiwa yang agak menarik sebelum sampai ke mekanisme penembakan-peristiwa yang penting di tingkat perangkat lunak.