乐趣区

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

线程模型

退出移动版