Reactor模型/Proactor模型

2022-03-18  本文已影响0人  九楼记

先明白基本概念:

传统IO阻塞模型

模型特点

问题

解决方法:
第一种:IO多路复用,多个事件阻塞在一个进程/线程中

Reactor模式

也叫 Dispatcher 模式。
I/O 多了复用统一监听事件,收到事件后分发(Dispatch 给某进程),是编写高性能网络服务器的必备技术之一。

单reactor单线程

方案说明:

多reactor多线程

注意:建立连接和socket里有数据可写可读都是一个就绪事件。

方案详细说明如下:

多Reactor多进程/线程的方案看起来比单Reactor多线程要复杂,但实际实现时反而更加简单,主要原因是:

目前著名的开源系统Nginx采用的是多Reactor多进程,采用多Reactor多线程的实现有Memcache和Netty。

Proactor

Reactor是非阻塞同步网络模型,因为真正的read和send操作都需要用户进程同步操作。这里的“同步”指用户进程在执行read和send这类I/O操作的时候是同步的,如果把I/O操作改为异步就能够进一步提升性能,这就是异步网络模型Proactor。

Reactor可以理解为“来了事件我通知你,你来处理”,而Proactor可以理解为“来了事件我来处理,处理完了我通知你”。这里的“我”就是操作系统内核,“事件”就是有新连接、有数据可读、有数据可写的这些I/O事件,“你”就是我们的程序代码。

Reactor实现了一个被动的事件分离和分发模型,服务等待请求事件的到来,再通过不受间断的同步处理事件,从而做出反应;
Proactor实现了一个主动的事件分离和分发模型;这种设计允许多个任务并发的执行,从而提高吞吐量。
所以涉及到文件I/O或耗时I/O可以使用Proactor模式,或使用多线程模拟实现异步I/O的方式。

Reference

https://zhuanlan.zhihu.com/p/95662364
https://ld246.com/article/1594887244486
https://leeshengis.com/archives/8805
https://cloud.tencent.com/developer/article/1769945
[1] https://www.cnblogs.com/goodcandle/archive/2005/12/10/294652.html
[2] https://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html

上一篇 下一篇

猜你喜欢

热点阅读