NIO里面socketchannel 不用selector,而是直接去读有问题吗?

安西都护府首席程序员 发布于 2016/08/30 09:51
阅读 295
收藏 0
NIO

NIO里面socketchannel 不用selector,而是直接去读有问题吗? 就直接以返回为0认为不可读 就想这样


while(true){
			ByteBuffer buffer2=ByteBuffer.allocate(1024);
			int  r=channel.read(buffer2);
			if(r>=0){
				//处理数据
			}
		}



加载中
0
Mx_JHJ
Mx_JHJ
while(true){
            ByteBuffer buffer2=ByteBuffer.allocate(1024);
            int r=0;
            if((r=channel.read(buffer2))!=0){
                //处理数据
            }
        }
Mx_JHJ
Mx_JHJ
回复 @安西都护府首席程序员 : 记得关闭资源
安西都护府首席程序员
安西都护府首席程序员
回复 @Mx_JHJ : 读到末尾就是-1,目前的问题就是CPU占用非常高
Mx_JHJ
Mx_JHJ
回复 @安西都护府首席程序员 : 首先,不会出现-1的情况,其次,你的代码是没什么大问题的
安西都护府首席程序员
安西都护府首席程序员
如果等于-1呢,其实我是想问这样直接读有没有问题。一般都是selector 轮换得到可读就读
0
xpbob
xpbob
你这样用倒也没什么问题,就是会不停的做无用功,nio一般都是基于select模型,epoll模型设计的,就是等有数据再通知读取,这样省了不少CPU的使用,你这样一直死循环轮转,估计会干扰其他线程运行
0
ksfzhaohui
ksfzhaohui
select模型可以用更少的线程去监控更多的连接,如果没什么大的并发的也不是不可以,这样用nio就感觉没什么意义了
ksfzhaohui
ksfzhaohui
回复 @安西都护府首席程序员 : 那就建议你用netty ,mina这类框架了
安西都护府首席程序员
安西都护府首席程序员
就是高并发,几十万长连接
返回顶部
顶部