Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 12132|Jawab: 1

[Komunikasi] Pemahaman BIO dan NIO

[Salin tautan]
Diposting pada 17/05/2019 15.34.50 | | |

Abstrak: Pemahaman BIO dan NIO
Baru-baru ini, saya mungkin melihat kode sumber ZooKeeper dan Mina dan menemukan bahwa keduanya diimplementasikan di Java NIO, jadi perlu untuk mencari tahu apa itu NIO. Berikut ini adalah ringkasan saya sendiri berdasarkan informasi online, untuk menghemat waktu, saya menggambar diagram dengan santai, selama saya bisa mencapai maknanya.

Perkenalan:
BIO: Synchronous blocking IO, mode implementasi server adalah menghubungkan satu thread pada satu waktu, yaitu ketika klien memiliki permintaan koneksi, server perlu memulai thread untuk diproses, jika koneksi ini tidak melakukan apa-apa akan menyebabkan overhead thread yang tidak perlu, tentunya dapat ditingkatkan melalui mekanisme thread pool.
NIO: IO non-pemblokiran sinkron, mode implementasi server adalah satu permintaan per utas, yaitu, permintaan koneksi yang dikirim oleh klien akan didaftarkan pada multiplexer, dan multiplexer akan memulai utas untuk diproses ketika koneksi memiliki permintaan I/O.
AIO (NIO.2): IO non-pemblokiran asinkron, mode implementasi server adalah secara efektif meminta satu utas, dan permintaan I/O klien diselesaikan oleh OS terlebih dahulu dan kemudian memberi tahu aplikasi server untuk memulai utas untuk diproses.

BIO
Pemblokiran sinkron IO, saya yakin semua orang yang telah mempelajari pemrograman jaringan sistem operasi atau pemrograman jaringan bahasa apa pun sudah tidak asing lagi, dalam loop sementara server akan memanggil metode penerimaan untuk menunggu permintaan koneksi klien penerima, setelah permintaan koneksi diterima, soket komunikasi dapat dibuat pada soket komunikasi ini untuk operasi baca dan tulis, saat ini tidak dapat lagi menerima permintaan koneksi klien lainnya, hanya dapat menunggu eksekusi operasi dengan klien yang terhubung saat ini.
Jika BIO ingin dapat memproses beberapa permintaan klien secara bersamaan, BIO harus menggunakan multi-threading, yaitu, setiap kali menerima blok menunggu permintaan klien, setelah permintaan koneksi diterima, soket komunikasi dibuat dan utas baru dibuka untuk memproses permintaan baca dan tulis data dari soket ini, dan kemudian segera terus menerima dan menunggu permintaan koneksi klien lainnya, yaitu, utas dibuat untuk setiap permintaan koneksi klien untuk diproses satu per satu, skematiknya mungkin seperti ini:
C:/Users/kevin/AppData/Local/YNote/data/kevinsir2003@163.com/8107c3f773ad4d2aa1a5a476e650ef84/094528_zqyy.jpeg

Meskipun server memiliki konkurensi yang tinggi saat ini, yaitu dapat menangani beberapa permintaan klien secara bersamaan, itu membawa masalah, seiring bertambahnya jumlah utas terbuka, itu akan menghabiskan terlalu banyak sumber daya memori, menyebabkan server melambat atau bahkan mogok, dan NIO dapat menyelesaikan masalah ini sampai batas tertentu.

NIO
Kunci untuk IO non-pemblokiran sinkron adalah mengadopsi ide berbasis peristiwa untuk mengimplementasikan multiplexer.
Perbedaan terbesar antara NIO dan BIO adalah Anda hanya perlu membuka utas untuk menangani peristiwa IO dari beberapa klien.
Ini adalah multiplexer yang dapat mendengarkan peristiwa IO dari beberapa klien:
J. Jika server mendengarkan permintaan koneksi klien, server akan membuat soket komunikasi untuknya (saluran di Java), dan kemudian kembali untuk melanjutkan mendengarkan.
B. Jika server mendengarkan data yang dikirim dari klien yang telah membuat soket komunikasi, server akan memanggil antarmuka yang sesuai untuk memproses data yang diterima, dan jika ada beberapa klien secara bersamaan, data juga dapat diproses secara bergantian.
C. Dengarkan permintaan koneksi beberapa klien dan terima permintaan data, dan juga dengarkan saat Anda memiliki data untuk dikirim.
C:/Users/kevin/AppData/Local/YNote/data/kevinsir2003@163.com/41709898aa0a4f8a830d7c348ed05fbb/094528_of9c.jpeg


Singkatnya, dalam satu utas, Anda dapat memanggil antarmuka multiplexing (pilih dalam java) untuk memblokir dan mendengarkan permintaan IO dari beberapa klien secara bersamaan, dan setelah permintaan IO diterima, fungsi yang sesuai akan dipanggil untuk memprosesnya.

skenario aplikasi masing-masing
Pada titik ini, Anda mungkin telah memperhatikan bahwa begitu permintaan tiba (apakah itu beberapa sekaligus atau hanya satu), fungsi pemrosesan IO yang sesuai akan dipanggil untuk menanganinya, jadi:
(1) NIO cocok untuk menangani skenario dengan jumlah koneksi yang banyak, namun koneksinya relatif singkat (operasi ringan), seperti Jetty, Mina, ZooKeeper, dll., yang semuanya diimplementasikan berdasarkan java nio.
(2) Metode BIO cocok untuk skenario di mana jumlah koneksi relatif kecil dan tetap, yang membutuhkan sumber daya server yang tinggi dan terbatas pada aplikasi.





Mantan:Perbedaan antara ajax dan axios dan fetch
Depan:Kerangka kerja penjadwalan pekerjaan sumber terbuka Kuarsa
Diposting pada 21/05/2019 19.32.33 |
Belajar belajar
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com