我们所困惑的是自己自大导致的
疑惑
代码: bootstrap.group(bossGroup, workerGroup) ;
1、这个代码是不是就是初始化两个线程,线程已经开启了?
解惑:是初始化两个线程,一个线程负责接受新的连接,一个负责处理读写;是开启了;
2、bossGroup线程初始化以后再干嘛?
解惑:bossGroup线程的机制是多路复用,虽然是一个线程但是可以监听多个新连接;
举个例子:
假设有A,B,C三个连接,先连接A,如果A还没连接上,立刻返回,不会一直等待,就不会阻塞其他客户端连接服务器;
然后去连接B,B连接上了;
再连接C,C连接还没到的话,立刻返回,不去等待,避免其他客户端连接不上阻塞;
现在再返回连接A,A连接上了,就ok了;
核心思想:轮询,没有连接立刻返回不要耽误其他的客户端连接,不会阻塞;一个线程不会浪费资源;
3、这个代码怎么与多路复用selector怎么挂钩?
解惑:两个线程,一个是bossGroup,一个是workerGroup,他们的机制都是多路复用selector,一个线程监听多个客户端,看上面问题的例子,就知道什么是多路复用selector
4、bossGroup负责与客户端建立连接的,既然有客户端等待连接,就不存在连不上,怎么会需要多路复用轮询呢?
解惑: 需要用多路复用,服务器与客户端一对多,轮询的核心代码是for循环;
既然存在客户端连接,不存在连接不上,轮询次数比较少(除非客户端有问题);