# IO 模型

常见的IO模型有阻塞、非阻塞、IO多路复用，异步。

同步阻塞，同步非阻塞，异步非阻塞，异步阻塞，

## 同步阻塞 <a href="#tong-bu-zu-sai" id="tong-bu-zu-sai"></a>

常见的http的一切请求，绝大部分都是同步阻塞的模型

![](https://3149448975-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LfnT31GMG1d9KiXwANW%2F-LfnT7UNILQRAFnaeTSW%2F-LfnTFsXh32VDEnOHFg7%2F1.png?generation=1558862976089086\&alt=media)

* 进程阻塞在等待数据返回
* 模型简单,便于开发

## 异步非阻塞 <a href="#yi-bu-fei-zu-sai" id="yi-bu-fei-zu-sai"></a>

![](https://3149448975-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LfnT31GMG1d9KiXwANW%2F-LfnT7UNILQRAFnaeTSW%2F-LfnTFs_JhJqm7IJomT-%2F2.png?generation=1558862971332766\&alt=media)

* 进程通过监听信号获取数据
* 进程在等待数据期间可以执行其他操作

## 异步阻塞（IO复用） <a href="#yi-bu-zu-sai-io-fu-yong" id="yi-bu-zu-sai-io-fu-yong"></a>

![](https://3149448975-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LfnT31GMG1d9KiXwANW%2F-LfnT7UNILQRAFnaeTSW%2F-LfnTFsbHB3vafJBiV9P%2F3.png?generation=1558862959038118\&alt=media)

* 进程可同同时处理多个IO(网络连接,文件句柄)
* 进程阻塞在等待返回就绪状态的句柄（epoll、select函数的返回）

> 参考：
>
> [网络IO之阻塞、非阻塞、同步、异步总结](http://www.cnblogs.com/Anker/p/3254269.html)
>
> [Swoole-异步文件系统IO](https://wiki.swoole.com/wiki/page/183.html)
>
> [异步网络模型](https://tech.youzan.com/yi-bu-wang-luo-mo-xing/)
