我们知道java 的bio是一个请求对应一个线程,那么java nio 可不可以这样理解,一个请求对应一个channel

kyssion
  • 76

最近在学习java nio 方面的知识,这个点一直有点奇怪,nio编程里有这样一段通用代码

for(xxxxxxx){
   if(selectionKey.isAcceptable()){
       ServerSocketChannel ssc = (ServerSocketChannel) selectionKey.channel();
       SocketChannel socketChannel = ssc.accept();
       socketChannel.configureBlocking(false);
       socketChannel.register(selector,SelectionKey.OP_READ);
    }
    f(selectionKey.isReadable()){
       .......
    }
}

循环扫描通道的状态,在通道accept的时候将会将会生成一个新的通道socketChannel,然后指定监听的事件,这样一个tcp连接都将形成一个channel,问一下这样理解对吗

回复
阅读 1.9k
2 个回答

你只从代码层面理解是不可行的,你要把代码和操作系统提供的网络模型结合起来去理解。

1、bio是一个请求来了,新开一个线程去处理
2、nio却不是一个请求对应一个channel,而是一个 tcp连接 对应一个channel.

你知道吗?

宣传栏