5种IO模型
来源:互联网 发布:linux 驱动编写步骤 编辑:程序博客网 时间:2024/05/21 10:19
进行I/O操作的时候,分为两个步骤:
- 准备数据
- 数据搬迁
Unix下共有5种I/O模型:
- 阻塞I/O
- 非阻塞I/O
- I/O复用(select & (e)poll)
- 信号驱动I/O(SIGIO)
- 异步I/O(Posix.1 的aio_系列函数)
前四种属于同步I/O,最后一种属于“异步I/O”。
区别:
- 异步I/O:操作完成后才会通知用户程序。
- 同步I/O:最后都要自己进行数据搬迁。
阻塞I/O
数据没有准备好的时候,一直处于阻塞状态。
非阻塞I/O
数据没有准备好,不发生阻塞,来来回回检查数据,直到数据准备好
I/O复用(select & (e)poll
select 和 poll 采用了阻塞的方式,数据没准备好的时候,会发生阻塞,与阻塞I/O不同的是,它可以一次阻塞多个I/O。
信号驱动I/O(SIGIO)
与非阻塞I/O很像,但是他不会来来回回检查数据是否准备好,而是僧数据准备好后,会有信号通知他,才回去对数据进行搬迁。
异步I/O(Posix.1的aio_系列函数)
调用aio_read函数,告诉内核描述字,缓冲区指针,缓冲区大小,文件偏移以及通知的方式,然后立即返回。当内核将数据拷贝到缓冲区后,在通知应用程序。
阻塞与非阻塞区别 :
- 阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
- 非阻塞调用是指不能立刻得到结果之前,该调用 不会阻塞当前线程。
0 0
- 5种IO模型
- 5种IO模型
- IO概念&5种IO模型介绍
- 5种网络IO模型
- 5种网络IO模型
- 5种io模型理解
- 5种网络IO模型
- Linux 5种IO模型
- 5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO
- 5种网络IO模型、Reactor、Proactor
- unix网络编程------5种IO模型
- 理解5种网络IO模型
- Linux下的5种IO模型
- UNIX下的5种IO模型
- 网络编程中的5种IO模型
- Unix网络编程5种IO模型
- Unix5种IO模型
- 五种IO模型
- redis漏洞引发的入侵
- Java Socket---一个简单的即时通讯小Demo
- python下使用selenium的坑
- Android Dagger2与ButterKnife冲突问题
- Mysql空值(NULL)不能使用算数运算符
- 5种IO模型
- windows下的caffe之GPU配置
- PHP阶乘
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- Lua与.net的CLR相互调用
- webpack基本配置
- 算法Codeforces Beta Round #2 winer
- Android文档Training之管理Activity生命周期
- 编辑器中材质参数设置以及记录保存功能