判断netty中事件发生的标准是什么

我们都知道os底层支持多路复用的方式有三种
select,poll,epoll。前面2者会导致阻塞,最后一个是采用事件回调的方式
那么我们想知道我们注册了下面四个事件,os底层是如何判断有事件发生,又是如何判断是哪个事件

OP_READ:检测到channel可读,或者达到了流的结尾,或者远端关闭了或者碰到一个pending的error这些都会导致read事件发生

OP_WRITE:检测到channel可写,或者远端关闭了或者碰到一个pending的error这些都会导致write事件发生

OP_CONNECT:检测到channel可链接,或者碰到一个pending的error这些都会导致connect事件发生

OP_ACCEPT:检测到channel可接受,或者碰到一个pending的error这些都会导致accept事件发生

其中可读的就绪条件是:当检测到我们的接受缓冲区有数据,则会触发read事件

其中可写的就绪条件是:只要底层的写缓冲区有空闲空间就可以就绪,所以我们不能一直注册write事件这会导致我们一直有write事件发生,我们只在真正要写的时候注册,写完了立马取消注册。
对于一次数据还未写完,但是写缓冲区已经满了 我们需要注册write事件,这样当缓冲区有空闲空间则会触发继续写

其中可链接的就绪条件是:当发现channel准备完成其连接序列,则就触发cconnect事件

其中可接受的就绪条件是:其和read触发的标准一致,就是接受缓冲区有数据,然后我们只要判断传递过来的是否是channel,如果是则是accept事件

猜你喜欢

转载自blog.csdn.net/weixin_33937499/article/details/87461933