多线程处理的几种模式—Proactor和Reactor

来源:互联网 发布:linux系统密码破解 编辑:程序博客网 时间:2024/05/02 01:31

Proactor和Reactor都是并发编程中的设计模式。他们都是用于派发/分离IO操作事件的。所谓的IO事件也就是诸如read/write的IO操作。"派发/分离"就是将单独的IO事件通知到上层模块。两个模式不同的地方在于,Proactor用于异步IO,而Reactor用于同步IO。

    Two patterns that involve event demultiplexors are called Reactor and Proactor。The Reactor patterns involve synchronous I/O, whereas the Proactor pattern involves asynchronous I/O.

 

Reactor:

1 事件句柄注册自己感兴趣的io事件

2 多路事件分发器等待io事件

3 io事件到来并唤醒多路事件分发器,多路器调用应用事件句柄

4 事件句柄进行实际读操作,处理读操作,重新声明感兴趣的io操作,并将控制权返回给多路分发器

 

多线程处理的几种模式—Proactor和Reactor

为了提高处理速度,也可以提供多线程并发处理

多线程处理的几种模式—Proactor和Reactor

 Proactor :

1 事件句柄初始化一个异步读操作,此时该句柄并不在意异步操作结果,而是要获得完成事件而注册

2 事件多路器等待直到io事件完成

3 当事件多路器等待io事件时,操作系统在一个并行的内核线程上处理读操作,并将数据放到一个用户定义的缓冲中,并通知事件多路器操作完成。

4 事件多路器调用事件句柄

5 事件句柄从用户定义缓冲中获得用户数据并操作,然后开始新的异步操作并将控释返回事件多路器

 

可以看出,两个模式的相同点,都是对某个IO事件的事件通知(即告诉某个模块,这个IO操作可以进行或已经完成)。在结构上,两者也有相同点:demultiplexor负责提交IO操作(异步)、查询设备是否可操作(同步),然后当条件满足时,就回调handler。
不同点在于,异步情况下(Proactor),当回调handler时,表示IO操作已经完成;同步情况下(Reactor),回调handler时,表示IO设备可以进行某个操作(can read or can write),handler这个时候开始提交操作。

http://blog.sina.com.cn/s/blog_3f0cd39a0100ly23.html

0 0