請教一個關於NIO執行方式的問題
用一般的DatagramSocket監聽埠上的訊息用如下程式碼
while(isRun){
receiverByte=new byte[Global.DATAGRAM_BYTES];
receiverDatagramPacket=new DatagramPacket
(receiverByte,receiverByte.length);
try{
1: receiverDatagramSocket.receive(receiverDatagramPacket);
}catch(IOException ex){
ex.printStackTrace();
}
//do something for packet
}
此種方法在1:處會阻塞
使用NIO的程式碼
DatagramChannel dc = DatagramChannel.open() ;
dc.configureBlocking( false ) ;
InetSocketAddress address = new InetSocketAddress( InetAddress.
getLocalHost() , 9000 ) ;
DatagramSocket s = dc.socket() ;
s.bind( address ) ;
Selector select = Selector.open() ;
SelectionKey key = dc.register( select , SelectionKey.OP_READ ) ;
ByteBuffer cb = ByteBuffer.allocate( 100 ) ;
while(true){
cb.clear() ;
int num = select.select() ; 2:
Set selectedKeys = select.selectedKeys() ;
Iterator it = selectedKeys.iterator() ;
while( it.hasNext() ){
SelectionKey k = ( SelectionKey )it.next() ;
if( ( k.readyOps() & SelectionKey.OP_READ )
== SelectionKey.OP_READ ){
DatagramChannel cc = ( DatagramChannel )k.channel() ;
cc.receive( cb ) ;
System.out.println( new String( cb.array() ) ) ;
}
}
}
此方法在2:處阻塞,仍然使用無限迴圈監聽埠,這樣與一般方法不就是一樣了嗎?
NIO的中斷 方式不就沒什麼意義了麼?怎樣以次來提高效能呢?
2者本質上有何區別
while(isRun){
receiverByte=new byte[Global.DATAGRAM_BYTES];
receiverDatagramPacket=new DatagramPacket
(receiverByte,receiverByte.length);
try{
1: receiverDatagramSocket.receive(receiverDatagramPacket);
}catch(IOException ex){
ex.printStackTrace();
}
//do something for packet
}
此種方法在1:處會阻塞
使用NIO的程式碼
DatagramChannel dc = DatagramChannel.open() ;
dc.configureBlocking( false ) ;
InetSocketAddress address = new InetSocketAddress( InetAddress.
getLocalHost() , 9000 ) ;
DatagramSocket s = dc.socket() ;
s.bind( address ) ;
Selector select = Selector.open() ;
SelectionKey key = dc.register( select , SelectionKey.OP_READ ) ;
ByteBuffer cb = ByteBuffer.allocate( 100 ) ;
while(true){
cb.clear() ;
int num = select.select() ; 2:
Set selectedKeys = select.selectedKeys() ;
Iterator it = selectedKeys.iterator() ;
while( it.hasNext() ){
SelectionKey k = ( SelectionKey )it.next() ;
if( ( k.readyOps() & SelectionKey.OP_READ )
== SelectionKey.OP_READ ){
DatagramChannel cc = ( DatagramChannel )k.channel() ;
cc.receive( cb ) ;
System.out.println( new String( cb.array() ) ) ;
}
}
}
此方法在2:處阻塞,仍然使用無限迴圈監聽埠,這樣與一般方法不就是一樣了嗎?
NIO的中斷 方式不就沒什麼意義了麼?怎樣以次來提高效能呢?
2者本質上有何區別
相關文章
- 請教一個關於執行緒的問題執行緒
- 請教一個關於執行平臺的問題
- 請教一個多執行緒的問題執行緒
- 請教關於執行緒的結束問題,急!!!執行緒
- 關於的Eclipse3.0.1執行問題請教Eclipse
- 請教一個涉及到多執行緒的關於單例的問題執行緒單例
- 初學,一個關於RMI的問題請教!!!
- 請教一個關於工廠模式的問題模式
- 請教個問題執行 httprunner 遇到的問題HTTP
- 請教大俠。關於多執行緒同步問題執行緒
- 請教一個事務+多執行緒 的問題執行緒
- 請教一個關於spring事務的問題 ?Spring
- 請教一個關於EJB建立物件時的問題物件
- 請教一個關於JdonFrameworkTest例項的問題Framework
- Java NIO 執行緒 的一個問題Java執行緒
- 關於執行緒使用中的幾個疑問,請教大家!執行緒
- 請教:一個關於行級資料許可權模型的問題模型
- jivejdon執行的問題請教
- 請教關於jb中開發ejb的一個問題
- banq大哥,請教一個關於jboss ide的問題IDE
- 請教一個關於全排列的演算法問題?演算法
- 遇到一個關於session id的問題,向大家請教!Session
- 請教一個關於hibernate對映oracle的問題Oracle
- 請問一個java nio問題Java
- 請教一個多執行緒的問題--wait多個鎖執行緒AI
- 請教一個問題,關於上傳檔案和圖片的問題
- 請教各位一個關於websocket協議開發的問題Web協議
- 請教一個關於JAVA SOCKET程式設計中的問題Java程式設計
- 請教關於快取的問題快取
- 請教關於ibatis的問題BAT
- 請教:signup執行問題?
- 請教 NIO 中物件流通訊的問題物件
- 請教一個多執行緒編寫的題!執行緒
- 請教一個cookies的問題Cookie
- 請教一個executeBatch()的問題BAT
- 請教一個資料表關係的問題
- 這樣的執行問題請教高手
- 請教banq關於domain object的問題AIObject