关于java:tomcatnio

main启动tomcat

maven:
https://mvnrepository.com/art…
启动:

endpoint

非阻塞模式:

public class Http11NioProtocol extends AbstractHttp11JsseProtocol<NioChannel> {

    public Http11NioProtocol() {
        super(new NioEndpoint());
    }

}

异步模式:

public class Http11Nio2Protocol extends AbstractHttp11JsseProtocol<Nio2Channel> {

    public Http11Nio2Protocol() {
        super(new Nio2Endpoint());
    }

}

过程剖析

1、指定 Protocol,初始化相应的 Endpoint,接下来是 NioEndpoint;
2、init 过程:在 NioEndpoint 中做 bind 操作;
3、start 过程:启动 worker 线程池,默认启动 1 个 Acceptor 和 2 个 Poller,可配;
4、Acceptor 获取到新的连贯后,getPoller0() 获取其中一个 Poller,而后 register 到 Poller 中;
5、Poller 循环 selector.select( * ),如果有通道 readable,那么在 processKey 中将其放到 worker 线程池中。

线程模型

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理