作者:alive | 来源:互联网 | 2023-06-24 10:24
篇首语:本文由编程笔记#小编为大家整理,主要介绍了图解tomcat-SocketIO部分相关的知识,希望对你有一定的参考价值。socket调测命令。IO线程与业务线程的
篇首语:本文由编程笔记#小编为大家整理,主要介绍了图解tomcat-Socket IO部分相关的知识,希望对你有一定的参考价值。
socket调测命令。IO线程与业务线程的模型。输入输出buffer设计。
这两个字段都是并发链表队列,放的元素都是PollerEvent对象。
PollerEvent默认感兴趣状态是0(即空),reset后也是设置0状态。
NIOEndpoint有个字段是eventCache此处是PollerEvent对象的全局缓存。整个全局不论是Poller还是其他,只要需要PollerEvent对象,都是从这里poll一个,如果poll不到则new一个。用完之后再offer到这个队列里。此队列可以配置大小。
Poller的events字段主要用于真正NIO事件对应的PollerEvent的存放。Poller线程会不停地将events队列中的PollerEvent对象poll出来并调用其run方法。
Poller在注册NIOChannel时,即在Acceptor接到accept事件后,PollerEvent对象感兴趣的是OP_REGISTER。紧接着会把这个PollerEvent对象加入到Poller的events队列中。
当Http11ConnectionHandler在处理http请求与响应时,如果是异步处理阶段,诸如解析请求头时,此时在处理结束时会向Poller的events队列中加入一个OP_READ的PollerEvent。用于后续继续read(因为是异步嘛,可能这一把还没有读取完)。这个阶段在tomcat内部称之为SocketState.LONG(异步解析)
SocketState.OPEN(keep-alive)也会向Poller的events队列中加入一个OP_READ的
微信要求原创的内容要达到300字。可是我这是图也是我原创的啊。
哎±±±±±
我只好把其中一张全是字的图用文字再描述下。
另,第一次发这种全是图的,不知道在手机上阅读效果如何。