2-4、信号驱动IO模型
文章插图
当进程发起一个IO操作 , 会向内核注册一个信号处理函数,然后进程返回不阻塞;当内核数据就绪时会发送一个信号给进程,进程便在信号处理函数中调用IO读取数据 。
1、特点:回调机制,实现、开发应用难度大;
2-5、异步IO模型
文章插图
当进程发起一个IO操作,进程返回(不阻塞),但也不能返回果结;内核把整个IO处理完后,会通知进程结果 。如果IO操作成功则进程直接获取到数据 。
1、典型应用:JAVA7 AIO、高性能服务器应用
2、特点:
不阻塞,数据一步到位;Proactor模式;
需要操作系统的底层支持,LINUX 2.5 版本内核首现 , 2.6 版本产品的内核标准特性;
实现、开发应用难度大;
非常适合高性能高并发应用;
3、IO模型比较
文章插图
3-1、阻塞IO调用和非阻塞IO调用、阻塞IO模型和非阻塞IO模型
【非阻塞io和异步io的区别,io操作的三种处理方式】 注意这里的阻塞IO调用和非阻塞IO调用不是指阻塞IO模型和非阻塞IO模型:
阻塞IO调用 :在用户进程(线程)中调用执行的时候,进程会等待该IO操作,而使得其他操作无法执行 。
非阻塞IO调用:在用户进程中调用执行的时候 , 无论成功与否,该IO操作会立即返回,之后进程可以进行其他操作(当然如果是读取到数据,一般就接着进行数据处理) 。
这个直接理解就好,进程(线程)IO调用会不会阻塞进程自己 。所以这里两个概念是相对调用进程本身状态来讲的 。
从上面对比图片来说,阻塞IO模型是一个阻塞IO调用 , 而非阻塞IO模型是多个非阻塞IO调用+一个阻塞IO调用,因为多个IO检查会立即返回错误,不会阻塞进程 。
而上面也说过了,非阻塞IO模型对于阻塞IO模型来说区别就是,内核数据没准备好需要进程阻塞的时候,就返回一个错误,以使得进程不被阻塞 。
3-2、同步IO和异步IO
同步IO:导致请求进程阻塞,直到I/O操作完成 。
异步IO:不导致请求进程阻塞 。
上面两个定义是《UNIX网络编程 卷1:套接字联网API》给出的 。这不是很好理解,我们来扩展一下 , 先说说同步和异步,同步和异步关注的是双方的消息通信机制:
同步:双方的动作是经过双方协调的,步调一致的 。
异步:双方并不需要协调,都可以随意进行各自的操作 。
这里我们的双方是指,用户进程和IO设备;明确同步和异步之后,我们在上面网络输入操作例子的基础上,进行扩展定义:
同步IO:用户进程发出IO调用,去获取IO设备数据,双方的数据要经过内核缓冲区同步,完全准备好后,再复制返回到用户进程 。而复制返回到用户进程会导致请求进程阻塞 , 直到I/O操作完成 。
异步IO:用户进程发出IO调用,去获取IO设备数据,并不需要同步 , 内核直接复制到进程 , 整个过程不导致请求进程阻塞 。
所以 , 阻塞IO模型、非阻塞IO模型、IO复用模型、信号驱动的IO模型者为同步IO模型,只有异步IO模型是异步IO 。
---------------------
原文:***/tjiyu/article/details/52959418
推荐阅读
- DDD死党:内存Join——将复用和扩展用到极致
- 掌握C++模板的艺术:类型参数、默认值和自动推导
- 即时微服务的逻辑和安全规则
- 公域流量和私域流量区别有哪些?看完全文你就知道了!
- luxe巨幕和imax的区别,中国巨幕和imax的区别是什么
- 什么情况?杨幂和赵丽颖怎么撕上热搜了?
- 拉面和面的正确配方,做拉面和面的正确配方?
- 感情是什么,“思想”和“感情”到底是什么意思,请用通俗易懂的话解说一下?
- 白醋的美容作用,甘油和9度米醋混合在一起是不有护肤的作用?
- 92岁胡枫谈周海媚离世突然沉默,称已安排好身后事,将和亡妻合葬