Apakah konsep model rangkaian Reaktor dalam Java IO
1 Apakah model Reaktor:
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
2. Klasifikasi Reaktor model:
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
1. Model benang tunggal Reaktor Tunggal:
1.1.1.1 >
(1) Benang reaktor mendengar melalui Peristiwa terpilih diedarkan melalui Dispatch selepas menerima acara (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.
2. Model berbilang benang Reaktor Tunggal:
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)
2.1. Proses pemprosesan:
(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.
2.2. Kelebihan dan Kekurangan:
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.
3. Model berbilang benang Reaktor Master-hamba:
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
3.1 Aliran pemprosesan:
(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
3.2 Kelebihan dan Kekurangan:
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
4 Kelebihan dan kekurangan reaktor:
(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!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Lazy memuatkan hanya pertanyaan apabila mengakses persatuan dengan mudah boleh membawa kepada masalah n 1, yang sesuai untuk senario di mana data yang berkaitan tidak ditentukan sama ada ia diperlukan; 2. Kegunaan pemuatan kecemasan dengan () untuk memuatkan data yang berkaitan terlebih dahulu untuk mengelakkan pertanyaan n 1, yang sesuai untuk senario pemprosesan batch; 3. Pemuatan kecemasan harus digunakan untuk mengoptimumkan prestasi, dan masalah n 1 dapat dikesan melalui alat seperti Laraveldebugbar, dan $ dengan atribut model digunakan dengan teliti untuk mengelakkan overhead prestasi yang tidak perlu.

Pengurusan memori Python adalah berdasarkan mekanisme pengiraan rujukan dan pengumpulan sampah. 1. Mekanisme pengiraan rujukan memastikan objek dikeluarkan dengan segera apabila nombor rujukan adalah 0. Nilai pulangan sys.getRefCount () adalah 1 lebih daripada rujukan sebenar kerana ia meningkatkan rujukannya sendiri; 2. Rujukan bulat tidak dapat dibersihkan melalui pengiraan rujukan, dan ia bergantung kepada kitar semula generasi modul GC. Memanggil GC.Collect () boleh mengitar semula objek yang tidak dapat dicapai; 3. Dalam pembangunan sebenar, jangka panjang rujukan objek besar harus dielakkan. Kita boleh menggunakan rujukan lemah lemah, tempat yang tepat pada masanya untuk melepaskan memori, dan menggunakan tracemalloc untuk memantau peruntukan memori; 4. Ringkasan: Python menggabungkan pengiraan rujukan dan pengumpulan sampah untuk menguruskan memori, pemaju boleh menggunakan alat dan mengoptimumkan paip rujukan.

UsearestapitobridgePhpandMlmodelsbyrunningthemodelinpythonviaflaskorfastapiandcallingitfromphpusingcurlorguzzle.2.runpythonsc riptsdirectlyFromphpusingExec () ortshell_exec () forsimple, trafficusecases rendah, walaupunThisapproachhassecurityandperformancelimitat

Laravel menyokong penggunaan pertanyaan SQL asli, tetapi parameter mengikat harus lebih disukai untuk memastikan keselamatan; 1. Gunakan db :: pilih () untuk melaksanakan pertanyaan pilih dengan parameter mengikat untuk mencegah suntikan SQL; 2. Gunakan db :: kemas kini () untuk melaksanakan operasi kemas kini dan mengembalikan bilangan baris yang terjejas; 3. Gunakan db :: masukkan () untuk memasukkan data; 4. Gunakan db :: padam () untuk memadam data; 5. Gunakan db :: pernyataan () untuk melaksanakan pernyataan SQL tanpa set keputusan seperti membuat, mengubah, dan sebagainya; 6. Adalah disyorkan untuk menggunakan Whereraw, SelectRaw dan kaedah lain dalam QueryBuilder untuk menggabungkan ungkapan asli untuk meningkatkan keselamatan

Layout Jadual: Tetap akan memaksa lebar lajur jadual ditentukan oleh lebar sel baris pertama untuk mengelakkan kandungan yang mempengaruhi susun atur. 1. Tetapkan jadual-Layout: Tetapkan dan tentukan lebar jadual; 2. Tetapkan nisbah lebar lajur tertentu untuk baris pertama th/td; 3. Gunakan ruang putih: nowrap, limpahan: tersembunyi dan teks-overflow: ellipsis untuk mengawal limpahan teks; 4. Berkenaan dengan pengurusan latar belakang, laporan data dan senario lain yang memerlukan susun atur yang stabil dan rendering berprestasi tinggi, yang secara efektif dapat menghalang susun atur susun atur dan meningkatkan kecekapan rendering.

Gunakan kumpulan menangkap ekspresi biasa di Notepad untuk menyusun semula teks dengan berkesan. Pertama, anda perlu membuka kotak dialog Penggantian (Ctrl H), pilih "Mod Carian" sebagai "Ekspresi Biasa", 1. Gunakan () untuk menentukan kumpulan penangkapan, seperti (\ w) untuk menangkap kata -kata; 2. Gunakan \ 1 dan \ 2 untuk merujuk kumpulan yang sepadan dalam kotak penggantian; 3. Contoh: Tukar nama "Johndoe" sebagai "Doe, John", cari (\ w) \ s (\ w), ganti dengan \ 2, \ 1; 4. Penukaran Format Tarikh 2023-12-25 hingga 25/12/2023, cari (\ d {4})-(\ d {2})-(\ d {2}), ganti dengan \ 3/\ 2/\ 1; 5. Penyusunan semula log boleh mengekstrak masa, tahap, ID dan maklumat lain

UseefficientdataStructuresLikeRrayListOverLinkedListandPrimitiveCollectionStoredeDeVead; 2.MinimizeObjectCreationByreusingObjects, usingstringbuilderforconcatenation, andcachingExpensiveBjects;

Pengendali ternary Python digunakan untuk secara ringkas melaksanakan penghakiman IF-else, dan sintaksinya adalah "value_if_trueif conditionelsevalue_if_false"; 1. Ia boleh digunakan untuk tugasan mudah, seperti mengembalikan rentetan yang sepadan berdasarkan nilai positif dan negatif; 2. Ia boleh mengelakkan kesilapan pembahagian, seperti menentukan bahawa penyebutnya bukan sifar dan kemudian pembahagian; 3. Ia boleh memilih kandungan mengikut syarat dalam format rentetan; 4. Ia boleh memberikan label kepada unsur -unsur yang berbeza dalam formula derivasi senarai; Harus diingat bahawa pengendali ini hanya sesuai untuk cawangan binari dan tidak boleh bersarang berbilang lapisan. Logik kompleks harus menggunakan struktur tradisional IF-ELIF-ELSE untuk memastikan kebolehbacaan.
