I/O模型

首先从I/O模型说起,主要分为两大类,同步I/O和异步I/O。
1)同步是指内核向应用进程通知的是就绪事件,这些事件包括读、写等等。
2)异步是指内核向应用进程通知的是完成事件。
3)同步和异步的区别:
同步是指前一件事不做完不做下一件事,等这个函数的结果才去做下一件事,类似程序的运行,串形执行。异步是指当前的事情没做完,我可以先去做其他事情。
因此同步情况下,内核向应用进程一直在返回就绪事件,告诉应用进程我在这一直等着呢,知道数据来了,将数据从内核拷贝到用户空间。而异步就干其他事了,当数据准备好了,内核才向应用进程通知。
如果是要时刻监视着没做完的事情有没有做完了,这叫做轮询模式。如果是那件事(工作线程)做完了自己过来通知我了,叫做回调模式。
4)在Linux下,同步I/O有四种,分别是阻塞I/O、非阻塞I/O、I/O复用、信号驱动的I/O。
阻塞I/O:应用程序调用一个I/O函数导致应用程序阻塞,进程一直等待,直到等到数据准备好。
非阻塞I/O:通过进程反复调用IO函数(多次系统调用,并马上返回);在数据拷贝的过程中,进程是阻塞的。
I/O复用:和阻塞I/O差不多,但是其优越性在于能够同时对多个I/O端口进行监听。I/O复用模型会用到select、poll、epoll函数,这几个函数也会使进程阻塞,但是和阻塞I/O所不同的的,这两个函数可以同时阻塞多个I/O操作。而且可以同时对多个读操作,多个写操作的I/O函数进行检测,直到有数据可读或可写时,才真正调用I/O操作函数。
信号驱动的I/O:首先我们允许套接口进行信号驱动I/O,并安装一个信号处理函数,进程继续运行并不阻塞。当数据准备好时,进程会收到一个SIGIO信号,可以在信号处理函数中调用I/O操作函数处理数据。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值