1、io主要分为:同步、异步、阻塞、非阻塞。
2、多路复用IO:多个tcp(或者多个Channel管道)连接被一个或少量线程处理。
select/poll:同时观察多个i/0,都没有准备好,就阻塞线程,当有i/o就绪,就唤醒线程,轮询所有i/o,找出已就绪的i/o进行处理。(i/o越多select阻塞越久)
epoll:只轮询就绪的i/o。
epoll对比select/poll优势:a.监控的描述符数量不受限制;b.监控的fd不影响效率,只有就绪的fd才会执行回调函数。
优化:
一种优化方式是:将Selector进一步分解为Reactor,将不同的感兴趣事件分开,每一个Reactor只负责一种感兴趣的事件。这样做的好处是:a、分离阻塞级别,减少了轮询的时间;b、线程无需遍历set以找到自己感兴趣的事件,因为得到的set中仅包含自己感兴趣的事件。
3、BIO(同步阻塞,一个连接对应一个线程,基于流);NIO(同步非阻塞,一个请求对应一个线程,基于通道和缓存区);AIO(异步非阻塞,一个有效请求对应一个线程)。