在一些高并发场景下,避免不了海量的网络连接,对于传统的网络 IO,通常都是使用一个线程去处理“连接”、“网络读写”、“编解码”、“业务计算”等事件;也就是说线程在处理其中某个事件时,其他事件需处于阻塞状态;当有海量连接进来需要服务器创建同等量级的线程,如此一来对于服务器的吞吐量和 cpu 的利用率将大打折扣;那么,当我们想支持海量连接时应该怎么做?
  或许有人会说服务器和客户端的连接时一对多,那么我们可以扩容、负载及降级;如果是临时流量暴涨,这样处理没什么大的问题;但是,如果流量并不是峰状而是梯状上升,那么就得从底层去解决;试想一下,现在有四个连接事件,对性能影响最大的毫无疑问是“编解码”和“业务计算”这种耗时的事件,我们可以将其交给独立的线程池去异步处理,处理完之后写网络缓冲区使其触发回调;至此,我们有一套方案来解决这些影响连接的耗时操作,称其为基于事件驱动的 Reactor 模型,其中处理接收连接的我们称之为 Acceptor,Reactor 负责分发连接,Handler 负责处理连接
  在上述方案中我们只分离了业务操作,但是当并发量太大时,网络读写也会成为瓶颈,所以进一步我们就需要将 Acceptor 和网络读写事件分离开,让其并发的处理;这样就会形成一条链:客户端连接交给相应的 xxxtor,然后不用去主动询问是否处理完成,每次由 xxxtor 回调通知其上一个即’Don’t call us, we’ll call you’