我知道在nio里面的selector中注册感兴趣的事件,就当注册的事件发生时就执行相应的逻辑。
      但是我看到网上很多代码演示都是在执行了可读事件以后就注册成可写事件,执行了可写事件后再注册成可读事件。但是我的系统中,并不确定下次事件是可读还是可写的,也就是说,发生了一次可读事件,但并不确定下次我是要写还是要读。如果我注册成既可读又可写的话,cpu就飙到了100%
     现在我很纠结,不知道正确的处理方法是怎样,我只是简单的加了个Thread.sleep();不过好像这样不太好啊··
     请各位大神帮帮忙,求解决办法····
     谢谢了!!!

解决方案 »

  1.   

    这样的话,你就要重写selectionkey,把你新加的事件添加进去。
      

  2.   

    只要 TCP 连接适合数据写入时就会产生 OP_WRITE 事件,基本上 95% 以上的时间都会产生 OP_WRITE 事件。由于很多时间都会产生 OP_WRITE 事件,一开始就注册的话会对服务器产生严重的性能损耗,过多的循环会导致 CPU 利用率骤增。一般来说,如果没有数据写入时不要注册 OP_WRITE,只在有数据要写入时再去注册,写完后就注销 OP_WRITE 事件. 
      

  3.   

    虽然说 NIO 比 BIO 有更高的性能,但是开发难度上增加了数倍,光一个 OP_WRITE 事件就可以搞死人。
      

  4.   

        如果是UDP连接,我需要写数据的时候,也会自动产生OP_WRITE事件吗?