Corak reka bentuk reaktor ialah corak pengendalian acara untuk perkhidmatan pengendalian permintaan dihantar serentak kepada pengendali perkhidmatan oleh satu atau lebih input Pengendali perkhidmatan kemudiannya menyahmultipleks permintaan yang masuk dan menghantarnya secara serentak kepada pengendali permintaan yang berkaitan.
Corak Reaktor juga dipanggil corak reka bentuk reaktor. dan merupakan corak reka bentuk acara untuk mengendalikan permintaan perkhidmatan yang diserahkan serentak kepada satu atau lebih pengendali perkhidmatan. Apabila permintaan tiba, permintaan ini dinyahmultipleks dan diedarkan kepada pemproses permintaan yang sepadan melalui pemproses perkhidmatan. Corak Reaktor terutamanya terdiri daripada dua bahagian teras: Reaktor dan Pengendali, seperti yang ditunjukkan dalam rajah di bawah Mereka bertanggungjawab untuk perkara berikut:
Reaktor: Bertanggungjawab untuk memantau dan mengedarkan acara. , jenis acara Mengandungi acara sambungan, membaca dan menulis acara
Pengendali: bertanggungjawab untuk memproses acara, seperti membaca -> ;
Dalam kebanyakan senario, memproses permintaan rangkaian mempunyai langkah berikut:
① baca: baca data daripada soket.
② nyahkod: Menyahkod, data pada rangkaian dihantar dalam bentuk bait Untuk mendapatkan permintaan sebenar, anda mesti menyahkod
③ mengira: pengiraan, iaitu pemprosesan perniagaan.
④ pengekodan: Pengekodan, data pada rangkaian dihantar dalam bentuk bait, iaitu, soket hanya menerima bait, jadi pengekodan diperlukan.
⑤ hantar: Hantar data respons
Untuk mod Reaktor, setiap kali Peristiwa dimasukkan ke Pelayan, Pengendali Perkhidmatan akan memajukannya (menghantar) Pengendali yang sepadan ialah diproses. Tiga peranan yang ditakrifkan dalam model Reaktor:
Reaktor bertanggungjawab untuk memantau dan mengedarkan peristiwa, dan menghantarnya kepada Pengendali yang berkaitan.. Acara baharu termasuk penyediaan sambungan sedia, sedia baca, sedia tulis, dsb.
Penerima: Minta penyambung untuk mengendalikan sambungan baharu daripada pelanggan. Selepas Reaktor menerima peristiwa sambungan daripada klien, ia memajukannya kepada Penerima, yang menerima sambungan Pelanggan, mencipta Pengendali yang sepadan, dan mendaftarkan Pengendali ini dengan Reaktor.
Pengendali: Pemproses permintaan, bertanggungjawab untuk pemprosesan acara, mengikat dirinya dengan acara, melaksanakan tugas baca/tulis tanpa sekatan, melengkapkan pembacaan saluran dan menulis keputusan keluar dari saluran selepas menyelesaikan pemprosesan daripada logik perniagaan. Kumpulan sumber yang tersedia boleh diurus.
Modelnya secara kasar seperti yang ditunjukkan dalam rajah di bawah:
Untuk permintaan baca/tulis, model Reaktor diproses mengikut perkara berikut proses:
(1) Aplikasi mendaftarkan acara sedia baca/tulis dan pengendali acara yang berkaitan
(2) Penyahmultipleks acara menunggu untuk peristiwa itu berlaku
(3) Apabila acara sedia baca/tulis berlaku, pemisah acara memanggil pengendali acara yang didaftarkan pada langkah pertama
Reaktor Reaktor dalam model boleh tunggal atau berbilang, dan Pengendali juga boleh berbenang tunggal atau berbilang benang, jadi terdapat kira-kira tiga mod gabungan:
Model benang tunggal Reaktor Tunggal
Model berbilang benang Reaktor Tunggal
Induk- Model benang tunggal Reaktor hamba
Model berbilang benang Reaktor tuan-hamba
Model benang tunggal Reaktor tuan-hamba ketiga tidak mempunyai kepentingan praktikal, jadi perkara berikut akan menumpukan pada tiga Model yang lain
(2) Jika ia adalah acara penubuhan sambungan, acara itu diedarkan kepada Penerima akan memperoleh sambungan melalui kaedah terima() dan cipta objek Pengendali untuk mengendalikan peristiwa tindak balas berikutnya
(3) Jika ia adalah acara baca dan tulis IO, Reaktor akan menyerahkan acara itu kepada yang sedang disambungkan Pengendali untuk memproses
(4) Pengendali akan melengkapkan pembacaan -> Proses perniagaan yang lengkap untuk menghantar
1.2 kelebihan model satu benang tunggal Reaktor ialah semua logik pemprosesan dilaksanakan dalam satu utas, dan tiada berbilang benang atau proses Isu komunikasi dan persaingan. Walau bagaimanapun, model ini mempunyai masalah serius dalam prestasi dan kebolehpercayaan:
① Prestasi: Hanya komponen yang dibezakan dalam kod keseluruhannya masih berbenang tunggal, yang tidak dapat menggunakan sepenuhnya sumber CPU Selain itu, bahagian pemprosesan perniagaan Pengendali bukan asynchronous mesti bertanggungjawab untuk memproses permintaan sambungan Ia juga bertanggungjawab untuk memproses permintaan baca dan tulis Secara umumnya, memproses permintaan sambungan adalah sangat pantas, tetapi memproses permintaan baca dan tulis melibatkan pemprosesan logik perniagaan, yang agak perlahan. Memandangkan Reaktor memproses permintaan baca dan tulis, permintaan lain akan disekat, yang boleh menyebabkan kesesakan prestasi sistem dengan mudah
② Kebolehpercayaan: Sebaik sahaja utas Reaktor terganggu secara tidak dijangka atau memasuki gelung tak terhingga, ia akan Akibatnya, keseluruhan modul komunikasi sistem tidak tersedia dan tidak boleh menerima dan memproses mesej luaran, menyebabkan kegagalan nod
Oleh itu, model proses tunggal Reaktor tunggal tidak sesuai untuk senario intensif pengkomputeran dan hanya sesuai untuk perniagaan Mengendalikan senario yang sangat pantas. Model threading Redis dilaksanakan berdasarkan model single-thread Reaktor tunggal Oleh kerana pemprosesan perniagaan Redis terutamanya diselesaikan dalam ingatan, kelajuan operasi adalah sangat pantas, dan kesesakan prestasi tiada pada CPU, jadi Redis memproses arahan dalam a. satu proses.
Untuk menyelesaikan masalah prestasi model benang tunggal Reaktor tunggal, model berbilang benang tunggal Reaktor telah berkembang, yang digunakan dalam bahagian pemproses acara. Multi-threading (kumpulan benang)
(1) Benang Reaktor mendengar acara melalui pilihan. dan menghantarnya melalui Dispatch selepas menerima Edaran acara
(2) Jika ia adalah acara penubuhan sambungan, acara itu diedarkan kepada Penerima akan mendapatkan sambungan melalui kaedah terima() dan mencipta a Objek pengendali untuk mengendalikan peristiwa tindak balas seterusnya
(3) Jika ia adalah acara baca dan tulis IO, Reaktor akan menyerahkan peristiwa itu kepada Pengendali yang sepadan dengan sambungan semasa untuk diproses
( 4) Tidak seperti satu utas tunggal Reaktor, Pengendali tidak lagi melakukan pemprosesan perniagaan khusus , hanya bertanggungjawab untuk menerima dan membalas peristiwa Selepas menerima data melalui pembacaan, data dihantar ke kumpulan utas Pekerja berikutnya untuk pemprosesan perniagaan.
(5) Kumpulan benang Pekerja memperuntukkan benang untuk pemprosesan perniagaan Selepas selesai, hasil respons dihantar kepada Pengendali untuk diproses.
(6) Selepas menerima keputusan respons, Pengendali mengembalikan hasil respons kepada Pelanggan melalui hantar.
Berbanding dengan model pertama, selepas memproses logik perniagaan, iaitu selepas mendapat acara baca dan tulis IO, ia diserahkan kepada kumpulan benang untuk pemprosesan, dan Pengendali mengumpul Selepas menerima respons, hasil respons dikembalikan kepada pelanggan melalui hantar. Ini boleh mengurangkan overhed prestasi Reaktor, membolehkannya menumpukan lebih pada pengedaran acara dan meningkatkan daya pemprosesan keseluruhan aplikasi Selain itu, Pengendali menggunakan mod berbilang benang untuk menggunakan prestasi CPU sepenuhnya. Walau bagaimanapun, terdapat masalah dengan model ini:
(1) Pengendali menggunakan mod berbilang benang, yang secara semula jadi membawa overhed persaingan berbilang benang untuk sumber Ia juga melibatkan pengecualian bersama dan mekanisme perlindungan untuk data yang dikongsi. menjadikan pelaksanaan lebih kompleks
(2) Satu Reaktor bertanggungjawab untuk memantau, mengedar dan bertindak balas kepada semua acara, yang boleh menyebabkan kesesakan prestasi dengan mudah dalam senario konkurensi tinggi.
Model berbilang benang Reaktor tunggal menyelesaikan masalah prestasi satu benang Pengendali, tetapi Reaktor masih berbenang tunggal dan akan masih mempunyai prestasi untuk senario konkurensi yang tinggi, jadi Reaktor perlu dilaraskan kepada mod berbilang benang, iaitu model berbilang benang Reaktor induk yang akan diperkenalkan seterusnya. Dalam model master-slave Reactor multi-threading, Reaktor dibahagikan kepada dua bahagian
(1) MainReactor: hanya bertanggungjawab untuk memproses peristiwa penubuhan sambungan, mendengar soket pelayan melalui pilihan dan mendaftarkan soketSaluran kepada subReactor. Biasanya Satu thread sudah cukup
(2) SubReactor: Bertanggungjawab untuk membaca dan menulis acara, mengekalkan pemilihnya sendiri, melakukan pengasingan berbilang saluran acara membaca dan menulis IO berdasarkan SocketChannel yang didaftarkan oleh MainReactor. , membaca dan menulis data rangkaian, dan menyerahkan pemprosesan perniagaan Ini dilakukan oleh kumpulan benang pekerja. Bilangan SubReaktor secara amnya sama dengan bilangan CPU
(1) Objek MainReactor dalam utas utama mendengar. kepada acara melalui pilih. Selepas menerima acara, ia diedarkan melalui Dispatch Jika jenis acara ialah acara penubuhan sambungan, ia diedarkan kepada Penerima untuk penubuhan sambungan
Penubuhan sambungan:
.① Pilih secara rawak benang Reaktor daripada kumpulan utas utama sebagai utas Penerima untuk mengikat port pendengaran dan menerima sambungan pelanggan
② Selepas utas Penerima menerima permintaan sambungan pelanggan, ia mencipta SocketChannel baharu dan mendaftarkannya dengan utas utama pool Pada rangkaian Reaktor lain, ia bertanggungjawab untuk pengesahan akses, penapisan senarai hitam putih IP, jabat tangan dan operasi lain.
③ Selepas langkah ② selesai, pautan lapisan perniagaan diwujudkan secara rasmi Alih keluar SocketChannel daripada pemultipleks utas Reaktor kumpulan utas utama, daftarkan semula ke utas kumpulan utas SubReaktor, dan. cipta Pengendali Digunakan untuk mengendalikan pelbagai acara sambungan
(2) Jika acara yang diterima bukan acara penubuhan sambungan, ia diedarkan kepada SubReactor, dan SubReactor memanggil Pengendali yang sepadan dengan sambungan semasa untuk diproses
(3) Lulus pengendali dibaca Selepas membaca data, edarkan data ke kumpulan benang Pekerja untuk pemprosesan perniagaan, dan kumpulan benang Pekerja memperuntukkan urutan untuk pemprosesan perniagaan Selepas selesai, hasil respons dihantar kepada Pengendali
(4) Pengendali melepasi hasil respons selepas menerimanya menghantar mengembalikan hasil respons kepada Klien
Kelebihan master-slave Reactor. -model benang adalah bahawa benang utama dan sub-benang mempunyai pembahagian kerja yang jelas Benang utama hanya bertanggungjawab untuk menerima sambungan baru, dan sub-benang Ia bertanggungjawab untuk menyelesaikan pemprosesan perniagaan yang berikutnya interaksi antara utas utama dan sub-benang juga sangat mudah Selepas sub-benang menerima sambungan dari utas utama, ia hanya perlu memproses perniagaan keputusan boleh dihantar terus kepada pelanggan dalam sub-benang .
Model Reaktor ini sesuai untuk senario konkurensi tinggi, dan rangka kerja komunikasi rangkaian Netty juga mengguna pakai pelaksanaan ini
(1) Respons pantas , tidak perlu Disekat oleh satu masa penyegerakan, walaupun Reaktor itu sendiri masih disegerakkan
(2) boleh mengelakkan masalah multi-benang dan penyegerakan yang kompleks ke tahap yang paling besar, dan mengelakkan overhed penukaran berbilang benang/proses;
(3) Kebolehskalaan, anda boleh menggunakan sepenuhnya sumber CPU dengan mudah dengan menambah bilangan kejadian Reaktor; logik pemprosesan, dan mempunyai kebolehgunaan semula yang sangat tinggi.
Atas ialah kandungan terperinci Apakah konsep model rangkaian Reaktor dalam Java IO. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!