reactor & proactor 笔记

1. 基本概念

  1.1 同步/异步,针对应用程序和内核交互而言。
    同步:进程触发IO操作等待或轮询查看IO操作是否完成;
    异步:进程触发IO操作后仅需自身的处理,IO操作完成后会得到通知(异步的特点)

  1.2 阻塞/非阻塞:针对进程访问数据
    阻塞:调用数据访问函数后一直等待
    非阻塞:调用数据访问函数后立即返回

  同步阻塞IO:传统的IO方式,进程发起一个IO操作后等待其完成;
  同步非阻塞IO:进程发起一个IO操作后返回做其他处理,但进程需要不断询问IO操作是否完成,如JAVA NIO
  异步阻塞IO:进程发起IO后等待内核通知,但仍然阻塞如select函数
  异步非阻塞IO:发起IO操作后立即返回,然后等待内核的IO操作通知,当前java无支持

  因此阻塞非阻塞本质上只针对同步有意义。

2. reactor & proactor
  2.1 reactor

    1. 注册就绪时间和关联的事件处理器;
    2. 事件分离器等待事件发生;
    3. 当发生读就绪事件时,事件分离器调用相应的时间处理器;

  2.2 proactor

    1. 等待事件
    2. 读数据,由proactor完成
    3. 把已经准备好的数据给用户处理函数(用户代码)
    4. 用户处理数据

备注:与reactor不同的是proactor关注的是读/写完成事件

上一篇:由ArrayList构造函数源码引出的问题


下一篇:Oracle执行计划 explain plan