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 线程池中。

线程模型


ciwi
1 声望0 粉丝