2016-04-07 23 views
0

programının diğer bölümlerini yazıyor ve kesiyor java NIO, AsynchronousSocketChannel yazıyorum. En programcılar bu kodu kullanmak varsayılan olarak, "tam": Sunucunun cevap veren beklemekasynchronousSocketChannel,

while(asynchronousSocketChannel.read(buffer).get() != -1) 

Bu kod nedenini, ama bunu özelleştirmek istiyorsanız ve sunucu için beklemek yok, ben istediğim anlamına başka bir şey yapmak ve bu kontrolden sonra orada yazıldığı takdirde veya olmasın için aşağıdaki gibi:

while(true){ 
if(asynchronousSocketChannel.read(buffer).get() != -1){ 
    //do something 
} 
else{ 
    //do something else 
} 

farklı algoritma bir demet denemek ama çalışmıyor. Kimsenin bir fikri var mı?

+0

Lütfen çoğu programcının bu kodu kullandığı iddiası için kanıtlarınızı üretin. Eşzamansız soketlerin bu şekilde tamamen senkronize şekilde kullanılması tam bir zaman kaybıdır. Engelleme modu NIO veya 'java.net.Socket' kullanmak daha kolay olurdu. – EJP

+0

"Senkronize bir G/Ç işleminde, bir iş parçacığı eylemi gerçekleştirir ve G/Ç isteği tamamlanana kadar bekler (program, işlemin bitmesini beklemeden" bekletilir "). Senkronize olmayan bir ortamda, bir iş parçacığı I/O işlemini daha fazla çekirdek yardımı ile gerçekleştirir. Aslında, bu istek derhal çekirdeğe geçer ve başka bir işi işlemeye devam eder. " Bunu okuyarak, asenkron olanın BÜYÜK olacak olan sistemim için daha iyi bir seçenek olabileceğini düşünüyorum. Benim durumumun neden fikrinizi "tamamen senkronize" olarak kabul ettiğini anlamıyorum? – APNezh

cevap

0

Okuyucuyu postalamalısınız, 'başka bir şey' yapmalı ve ardından gelecekteki sonucun sonucunu almalısınız.

+0

Üzgünüz, daha açık bir şekilde bahsetmeni istiyorum, tamamen emin olduğum şey şu ki, bu istemciye yanıt veren bir sunucu kullandığımda (istemci Eşzamanlı İstemci (CompletionHandler'e göre)) kod çalışır (çalıştırılmalı, çünkü asynchronousSocketChannel.read (buffer) .get() artık -1 değil) ancak sunucu ona cevap vermiyorsa, program tamamen durur. Benim için bu örnek gerçekten güvenilir bir kitapta gördüğümde gerçekten garip bir davranış – APNezh