Penjelasan Sederhana untuk "Pola Reaktor" dengan Aplikasinya [ditutup]

89

Pola reaktor dijelaskan di wikipedia , dan ini agak terlalu abstrak. Bisakah Anda menggambarkan pola ini dengan cara yang lebih konkret? Idealnya dengan potongan kode atau diagram kelas tingkat tinggi yang menjelaskan beberapa aplikasi pola reaktor.

Eleco
sumber
3
Menemukan pertanyaan ini sebagai jawaban yang bagus - stackoverflow.com/questions/9138294/…
Ryan Gibbons

Jawaban:

38

Anda mungkin ingin memeriksa kertas asli yang menjelaskannya http://www.dre.vanderbilt.edu/~schmidt/PDF/reactor-siemens.pdf

Pola desain Reaktor menangani permintaan layanan yang dikirimkan secara bersamaan ke aplikasi oleh satu atau lebih klien. Setiap layanan dalam aplikasi dapat terdiri dari metode serveral dan diwakili oleh pengendali kejadian terpisah yang bertanggung jawab untuk mengirimkan permintaan khusus layanan. Pengiriman event handler dilakukan oleh dispatcher inisiasi, yang mengelola event handler terdaftar. Demultiplexing permintaan layanan dilakukan oleh demultiplexer peristiwa sinkron.

reese
sumber
Seperti yang akan Anda lihat saat membaca artikel, Douglas Schmidt et.al menerapkan kerangka kerja C ++ yang sangat efisien dan modular yang disebut Lingkungan Komunikasi Adaptif, di mana pola Reaktor memainkan peran sentral. Kerangka itu sendiri memanfaatkan sejumlah besar pola desain dan layak untuk diperiksa demi itu saja. Jika Anda mencari kerangka kerja portabel untuk membangun backend C ++ yang sangat skalabel, maka ACE layak untuk Anda lihat.
pengguna2015735
1
@reese Link rusak hari ini kawan :(
Allan Chua
1
@AllanChua Saya rasa saya menemukannya - dre.vanderbilt.edu/~schmidt/PDF/Reactor.pdf
manish ma
3
OP meminta penjelasan "sederhana, konkret", dan Anda menawarkan sesuatu yang bahkan lebih abstrak daripada Wikipedia ...
Zhe
21

Sebuah reaktor memungkinkan banyak tugas yang blok (katakanlah karena IO) diproses secara efisien menggunakan satu utas. Reaktor mengelola kumpulan penangan dan menjalankan loop peristiwa. Saat dipanggil untuk melakukan tugas, ia menghubungkannya dengan penangan baru atau kosong sehingga membuatnya aktif. Perulangan peristiwa (1) menemukan semua penangan yang aktif dan tidak diblokir (atau mendelegasikan ini ke implementasi petugas operator) (2) mengeksekusi masing-masing penangan yang ditemukan ini secara berurutan hingga mereka menyelesaikan atau mencapai titik di mana mereka memblokir. Penangan yang sudah selesai menjadi tidak aktif dan kosong untuk digunakan kembali sedangkan penangan aktif yang diblokir menghasilkan, memungkinkan loop acara untuk melanjutkan. (3) Ulangi dari langkah (1)

andrew pate
sumber
1
Tidak suka karena ini tidak benar
SebNag
3
Ide intinya adalah melakukan demultiplexing peristiwa sinkron. Penangan peristiwa hanya dipanggil jika mereka dapat mengeksekusi dengan cara non-pemblokiran misalnya seluruh paket data tersedia di soket jaringan, menunggu penangan peristiwa untuk memproses data. Hal ini memungkinkan untuk menjalankan event handler secara berurutan dengan cara yang tidak memblokir
SebNag
2
"Pola Reaktor bertanggung jawab atas demultiplexing dan pengiriman beberapa penangan kejadian yang dipicu saat memungkinkan untuk memulai operasi secara sinkron tanpa pemblokiran." dari kertas yang ditautkan dalam jawaban yang diterima
SebNag
Ini tidak benar sama sekali. Jumlah ulir di non-reaktor sebanyak jumlah di pola reaktor. Alih-alih loop peristiwa, Anda dapat memiliki satu thread "penggerak" yang tidak menggunakan pola pengamat / event-listener. Performa yang sama.
Zombies