BIO | NIO | AIO |
Thread-Per-Connection | Reactor | Proactor |
什么是Reactor
Reactor是一种开发模式,模式的核心流程:
注册感兴趣的事件->扫描是否有感兴趣的事件发生->事件发生后做出相应的处理。
client/Server | SocketChannel/ServerSocketChannel | OP_ACCEPT | OP_CONNECT | OP_WRITE | OP_READ |
client | SocketChannel | Y | Y | Y | |
client | ServerSocketChannel | Y | |||
client | SocketChannel | Y |
Y |
三种版本
Thread-Per-Connection模式
注意到每个 handler 里的 read 和 send都是阻塞操作,那用线程池不就行了?但那只是避免了线程数量无限增长而已,依旧无法避免等待线程的阻塞。
Reactor 模式 V1:单线程,一个线程太累啦,而且他一旦挂了,整个系统挂了。相当于创业初期,老板就是个全干工程师。
Reactor 模式 V2:多线程,老板开始招合伙人了,大家一起干!
Reactor 模式 V3:主从多线程。对于服务器来说,最重要的莫过于接收连接,使用主线程做这些事。老板真的成为资本家了,开始招聘打工人啦!老板只负责最关键的事情即可。