netty
java nio
- buffer
- ByteBuffer position, limit, capacity, flip切换读写模式
- channel
- 与buffer交互,读操作:将channel数据填充到buffer,channel.read(buffer),写操作:将buffer数据写入channel,channel.write(buffer)
- selector 选择器or多路复用器 非阻塞
- 一个线程管理多个 Channel
tomcat nio
流程:
- 指定 Protocol,初始化相应的 Endpoint,我们分析的是 NioEndpoint;
- init 过程:在 NioEndpoint 中做 bind 操作;
- start 过程:启动 worker 线程池,启动 1 个 Acceptor 和 2 个 Poller,当然它们都是默认值,可配;
- Acceptor 获取到新的连接后,getPoller0() 获取其中一个 Poller,然后 register 到 Poller 中;
- Poller 循环 selector.select(xxx),如果有通道 readable,那么在 processKey 中将其放到 worker 线程池中。