Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 12132|Yanıt: 1

[İletişim] BIO ve NIO'nun Anlaşılması

[Bağlantıyı kopyala]
Yayınlandı 17.05.2019 15:34:50 | | |

Özet: BIO ve NIO'nun Anlaşılması
Son zamanlarda muhtemelen ZooKeeper ve Mina'nın kaynak kodlarına baktım ve ikisinin de Java NIO ile uygulandığını gördüm, bu yüzden NIO'nun ne olduğunu anlamam gerekiyor. Aşağıda, çevrimiçi bilgilere dayanan kendi özetim yer alıyor; zaman kazanmak için, anlamı elde edebildiğim sürece diyagramı rahatça çizdim.

Giriş:
BIO: Senkron engelleme IO, sunucu uygulama modu her seferinde bir iş parçacığı bağlamaktır; yani istemcinin bağlantı talebi olduğunda sunucunun işlem için bir iş parçacığı başlatması gerekir, bu bağlantı hiçbir şey yapmazsa gereksiz iş parçacığı yükü oluşur, tabii ki bu iş parçacığı havuzu mekanizmasıyla geliştirilebilir.
NIO: Senkron, engelleymeyen IO, sunucu uygulama modu her iş parçacığına bir istek olur; yani, istemci tarafından gönderilen bağlantı talebi çoklu cihazda kaydedilir ve bağlantıda bir G/O talebi olduğunda çoklu cihaz işleme için bir iş parçacığı başlatır.
AIO (NIO.2): Asenkron, engellemesiz IO, sunucu uygulama modu etkili bir iş parçacığını talep etmektir ve istemcinin I/O talepleri önce işletim sistemi tarafından tamamlanır ve ardından sunucu uygulamasına iş parçacığını başlatması için bildirim verilir.

BIYOGRAFI
Senkron engelleme IO, işletim sistemi ağ programlamasını veya herhangi bir dil ağ programlamasını öğrenmiş herkesin aşina olduğuna inanıyorum, while döngüsünde sunucu, alıcı istemcinin bağlantı talebini beklemek için kabul yöntemini çağırır, bir bağlantı talebi alındıktan sonra, bu iletişim soketinde okuma ve yazma işlemleri için bir iletişim soketi kurulabilir, bu durumda artık diğer istemci bağlantı taleplerini alamaz, sadece şu anda bağlı olan istemci ile işlemin yürütülmesini bekleyebilir.
BIO, aynı anda birden fazla istemci isteğini işleyebilmek istiyorsa, çoklu iş parçacığı kullanmalıdır; yani, her kabul blokları istemci isteğini beklediğinde, bağlantı talebi alındığında bir iletişim soketi kurulur ve bu soketin veri okuma ve yazma talebi işlenmesi için yeni bir iş parçacığı açılır, ardından hemen diğer istemci bağlantı isteklerini kabul edip beklemeye devam eder; yani, her istemci bağlantı talebi için ayrı ayrı işlenmesi için bir iş parçacığı oluşturulur; şema muhtemelen şöyledir:
C:/Users/kevin/AppData/Local/YNote/data/kevinsir2003@163.com/8107c3f773ad4d2aa1a5a476e650ef84/094528_zqyy.jpeg

Sunucu şu anda yüksek eşzamanlılığa sahip olsa da, yani aynı anda birden fazla istemci isteğini yönetebiliyor, ancak açık iş parçacığı sayısı arttıkça çok fazla bellek kaynağı tüketiyor, bu da sunucunun yavaşlamasına veya hatta çökmesine yol açıyor ve NIO bu sorunu belli bir ölçüde çözebilir.

NIO
Senkron engellemesiz bir Giriş'in anahtarı, bir çoklu cihaz uygulamak için olay odaklı bir fikir benimsemektir.
NIO ile BIO arasındaki en büyük fark, birden fazla istemciden gelen IO olaylarını işlemek için sadece bir thread açmanız yeterlidir.
Birden fazla istemcinin IO olaylarını dinleyebilen bir multiplexer'dır:
C. Sunucu istemci bağlantı isteğini dinlerse, onun için bir iletişim soketi (Java'da kanal) kurar ve ardından dinlemeye devam etmek için geri döner.
B. Sunucu, iletişim soketi oluşturan istemcinin gönderdiği verileri dinlerse, alınan veriyi işlemek için ilgili arayüzü çağırır ve aynı anda birden fazla istemci varsa, veri de sırayla işlenebilir.
C. Birden fazla istemcinin bağlantı isteklerini dinleyin ve veri taleplerini alın, ayrıca göndermeniz gereken veri ne zaman olduğunu da dinleyin.
C:/Users/kevin/AppData/Local/YNote/data/kevinsir2003@163.com/41709898aa0a4f8a830d7c348ed05fbb/094528_of9c.jpeg


Kısacası, tek bir iş parçacığında, çoklu işletim sistemindeki arayüzü (java'da select) çağırarak birden fazla istemciden gelen IO isteklerini aynı anda engelleyip dinleyebilirsiniz ve bir IO isteği alındığında, ilgili fonksiyon çağrılarak işlemi gerçekleştirir.

İlgili Uygulama Senaryoları
Bu noktada, bir istek geldiğinde (ister birden fazla istek olsun ister sadece bir tane), ilgili IO işlem fonksiyonunun onu yönetmek için çağrılacağını fark etmiş olabilirsiniz, yani şöyle:
(1) NIO, çok sayıda bağlantıya sahip senaryoları yönetmek için uygundur, ancak bağlantılar nispeten kısa (hafif işlemli), örneğin Jetty, Mina, ZooKeeper vb. gibi, hepsi java nio temelli uygulanır.
(2) BIO yöntemi, bağlantı sayısının nispeten az ve sabit olduğu, yüksek sunucu kaynakları gerektiren ve uygulamalarla sınırlı olan durumlar için uygundur.





Önceki:ajax ile axios ve fetch arasındaki fark
Önümüzdeki:Açık kaynak iş zamanlama çerçevesi Quartz
Yayınlandı 21.05.2019 19:32:33 |
Öğrenmeyi öğren
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com