上海设计网站设计,在深圳市做一个网站多少钱,济南网站制作工具,简述网站设计的开发流程我们在IO模型和Java网络编程模型中#xff0c;对IO有了一定的理解。这一篇#xff0c;主要讲解基于事件驱动的两种是在原来基础上的扩展。在基于事件驱动的网络编程模型中#xff0c;Reactor和Proactor模型是两种常用的IO设计模型。
我们知道BIO#xff08;阻塞IO#xf…我们在IO模型和Java网络编程模型中对IO有了一定的理解。这一篇主要讲解基于事件驱动的两种是在原来基础上的扩展。在基于事件驱动的网络编程模型中Reactor和Proactor模型是两种常用的IO设计模型。
我们知道BIO阻塞IO只有等待阻塞方法结束了操作权才会交还给调用线程在阻塞期间调用者做不了任何操作只能等待。在此期间调用者线程无法转向其他能做的事对调用者来讲这其实是一种浪费。在NIO非阻塞IO中非阻塞IO会立刻将结果返回到调用者调用者获取结果无需等待。获得的结果无非两种数据准备好了你继续表演吧要么数据还没准备好你要不再试试或者你等会再试试。而对AIO异步IO调用方立刻获得返回并且操作系统会使用另外的资源来达成此次的IO请求并在操作系统完成数据准备后通知调用者。
Reactor模式和Proactor模型
Reactor模型的中心思想采用的就是我们在IO模型和Java网络编程模型中所讲的多路复用IO。Reactor模型主要包含以下几个角色
1Handle也叫句柄有些地方也叫描述符。如网络Socket IO中称网络IO句柄或者Socket描述符在文件读写中称文件IO句柄或者文件描述符等。
2Synchronous Event Demultiplexer也称同步事件多路分解器用于阻塞等待发生在句柄集合上的一个或者多个事件因为事件的到来是随机不可预测的底层要实现事件的监听采取的是循环等待的策略这种策略也叫事件循环。事件循环依赖系统调用这里的系统调用指的就是select/poll/epol等底层函数。这些底层函数一旦监听到句柄或描述符的读就绪或者写就绪就会通知调用方进行读写操作。同步事件分离器依赖底层系统调用的实现。
3Event Handler 可称为事件处理器不同的事件可以有不同的处理器。通常IO框架库会将事件处理器定义成一个模板函数不同的事件处理器可以有不同的特性拥有自己业务相关的实现。
4Reactor也称为反应器反应器主要功能包括以下注册或者删除应用程序所关注的事件句柄运行事件循环监控事件的到来当事件到达时反应器分离事件并通知到对应的具体的事件处理器上由具体的事件处理器处理器调用相关的函数来实现数据的读或者写处理完数据后交还系统的控制权。
Reactor模型图
整体的业务流可以概括为首先调用者先向反应器注册其对某种具体 的IO动作感兴趣反应器会循环监控调用 者注册的事件是否已发生如可读可写等当事件发生后事件分解器就被唤醒会通知到事件对应的处理器来完成 事件的读写可以看出在具体事件到达时处理程序不是调用的反应器而是通过反应器分离的事件处理器来作数据的读或者写这种方式又被称为“好莱坞法则”类似于好莱坞大导演找演员的模型你别来找我等活来了我来找你吧。Reactor模型当有对应的IO完成时回调对应的函数来处理这种模型本质上还是一种同步的IO模型其底层也并没有调用对应的异步IO的函数。
Reactor模型中的事件处理器是基于模板的模型来实现的这意味着不同的事件处理器是分离的业务间具体低侵入性。Reactor模型的底层系统调用也是一个模板模型可以用select实现亦或epoll但是必须满足能监控活跃连接的功能。
Proactor与Reactor则不同Reactor是基于同步IO模型实现的而Proactor是基于异步IO。
Proactor中调用者会调用异步操作处理器提供的异步函数调用之后 调用者线程和异步操作处理器会独立运行这依赖于操作系统对异步IO的支持实际的IO是由操作系统来完成 的。然后Proactor会进行事件循环等待事件的到来 当事件分解器等待事件到来的同时操作系统已经在同时将目标数据拷备到用户空间当拷备完成 后会通知到事件分解器事情已经搞完了事件分解器将完成事件转发到相应的事件处理者或者 回调函数调用 者就可以利用这些数据处理自己的业务逻辑 了。
Reactor和Proactor都是对某个具体IO事件的告知这也就我们所说的基于事件驱动Reactor是告知的事件已准备好而Proactor是事件已做好。他们的业务 逻辑也很类似都是事件分解器来负责IO的监控并回调对应的事件处理器不同之处在于Reactor事件告知的是已准备好还需要进一步的从内核 空间数据拷备到用户空间。而Proactor是数据已经准备好调用 者可以直接在用户空间使用了。 为了让学习变得轻松、高效今天给大家免费分享一套Java入门教学资源。帮助大家在成为Java架构师的道路上披荆斩棘。需要入门的资料欢迎加入学习交流群928505736