简介:Reactor 设计模式是一种事件驱动的设计模式,将一个或者多个客户端请求分发到不同的处理器上,来提升事件处理的效率。主要的应用场景就是java NIO当中用户处理网络请求。使用的是异步非阻塞IO
在接受Reactor 模式之前,需要先了解常见的几种IO网络模型。
1、BIO(阻塞IO模型)
以套接字模型为例:在进程空间中调用recvfrom, 其系统调用直到数据包到达且被复制到应用进程的缓冲区中或者发生错误时才可以返回,在此期间会一直等待,进程在从调用recvfrom 开始到它返回的整段事件内都是阻塞的,(举个栗子:我去餐馆吃饭,我先点菜,点完菜之后,我就坐在一旁等待,直到菜做好之后,我再开始吃,在师傅做菜的过程中,我没有做任何事情一直在等待)
2、非阻塞IO模型
recvfrom 从应用层到内核的时候,如果缓冲区没有数据,会直接返回一个信息,然后过段时间之后,再去进行轮询检测这个状态,看是不是有数据到来,
3、I/O复用模型
进程通过将一个或者多个操作阻塞在select上,select可以帮我们检测fd(文件操作符)是否处于就绪状态,如果有数据准备好,就返回可操作的信息,再进行进一步的读写操作
4、异步I/O
提前告知内核启动某个操作,并让内核在整个操作完成后(将数据从内核复制到用户自己的缓冲区)通知我们,