webserver项目的知识点

时间:2021-08-17 14:52:54   收藏:0   阅读:22

Reactor是什么?跟Proactor的区别?

Reactor

Reactor模式是处理并发I/O比较常见的一种模式,中心思想就是,将所有要处理的I/O事件注册到一个中心I/O多路复用器上,同时主线程阻塞在多路复用器上;一旦有I/O事件到来或是准备就绪(区别在于多路复用器是边沿触发还是水平触发),多路复用器返回并将相应I/O事件分发到对应的处理器中。

Reactor模型有三个重要的组件:
多路复用器:由操作系统提供,在linux上一般是select, poll, epoll等系统调用。
事件分发器:将多路复用器中返回的就绪事件分到对应的处理函数中。
事件处理器:负责处理特定事件的处理函数。

具体流程如下:

优点:

Proactor

Proactor最大的特点是使用异步I/O。所有的I/O操作都交由系统提供的异步I/O接口去执行。工作线程仅仅负责业务逻辑。

在Proactor中,用户函数启动一个异步的文件操作。同时将这个操作注册到多路复用器上。

多路复用器并不关心文件是否可读或可写而是关心这个异步读操作是否完成。异步操作是操作系统完成,用户程序不需要关心。

多路复用器等待直到有完成通知到来。当操作系统完成了读文件操作——将读到的数据复制到了用户先前提供的缓冲区之后,通知多路复用器相关操作已完成。多路复用器再调用相应的处理程序,处理数据。

具体流程如下:

异同

两个模式的相同点,都是对某个IO事件的事件通知(即告诉某个模块,这个IO操作可以进行或已经完成)。在结构上两者也有相同点:demultiplexor负责提交IO操作(异步)、查询设备是否可操作(同步),然后当条件满足时,就回调注册处理函数。

不同点在于,异步情况下(Proactor),当回调注册的处理函数时,表示IO操作已经完成;同步情况下(Reactor),回调注册的处理函数时,表示IO设备可以进行某个操作(can read or can write),注册的处理函数这个时候开始提交操作。

解释同步和异步

同步和异步是针对应用程序和内核的交互而言的

同步指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪

异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到IO完成的通知

解释阻塞和非阻塞

阻塞和非阻塞是针对于进程在访问数据的时候,根据IO操作的就绪状态来采取的不同方式

阻塞方式下读取或者写入函数将一直等待

非阻塞方式下,读取或者写入函数会立即返回一个状态值

好博客深入理解

五种IO模型和两种IO事件处理模式

IO多路复用

有限状态机解析HTTP请求

三种定时器

单例模式与阻塞队列的日志系统

面经1

面经2

原文:https://www.cnblogs.com/luoyugongxi/p/15149113.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!