异步同步,阻塞非阻塞,reactor/proactor

文章目录

reactor和proactor区别

1.reactor

复制代码
应用线程       内核
    |           |
 注册事件       |
    |           |
    |<--事件就绪--|
    |           |
  读/写数据 <----|
  1. proactor

    应用线程 内核
    | |
    发起异步 I/O |
    | |
    | |--> 内核完成 I/O
    | |--> 回调触发
    v v
    做其他工作 处理结果

特性 Reactor Proactor
I/O 执行 应用线程主动执行 内核/线程池执行
事件通知 就绪通知(ready) 完成通知(completion)
回调执行 原线程调用 原线程或其他线程
阻塞情况 可能阻塞在读/写 不阻塞,完全异步

💡 一句话记忆:

Reactor = "事件就绪我去做";

Proactor = "我交给系统做,完成了通知我"。

同步IO/异步IO区别

同步 I/O = 发起就阻塞,等待完成;

异步 I/O = 发起立即返回,完成由回调/事件通知处理。

阻塞非阻塞

同步 = 发起 I/O 后自己去做/等待结果

异步 = 发起 I/O 后不管,等系统通知

阻塞 = 线程等,不能干别的

非阻塞 = 线程不等,可继续做其他事