IO复用

同步:发出一个功能调用时,在没得到结果之前,该调用就不会返回

异步:当一个异步调用发出以后,调用者不会立刻得到结果,实际处理这个调用的部件是在调用发出之后,通过状态通知调用者。

同步异步他们是消息通知机制

阻塞和非阻塞,他们是程序在等待消息时的状态。

阻塞:在调用结果返回之前 ,当前线程会被挂起,函数只有在得到结果之后才会返回;

非阻塞:指不能立即得到结果之前,该函数不会阻塞当前线程,而是立即返回。


阻塞I/O模型

应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好。 如果数据没有准备好,一直等待….数据准备好了,从内核拷贝到用户空间,IO函数返回成功指示。

非阻塞I/O模型:

简介:非阻塞IO通过进程反复调用IO函数(多次系统调用,并马上返回);在数据拷贝的过程中,进程是阻塞的

/O复用模型

 简介:主要是select和epoll;对一个IO端口,两次调用,两次返回,比阻塞IO并没有什么优越性;关键是能实现同时对多个IO端口进行监听;

 

/O复用模型会用到select、poll、epoll函数,这几个函数也会使进程阻塞,但是和阻塞I/O所不同的的,这两个函数可以同时阻塞多个I/O操作。而且可以同时对多个读操作,多个写操作的I/O函数进行检测,直到有数据可读或可写时,才真正调用I/O操作函数

select模式】

首先创建了事件的描述符集合,,对于一个事件,关注其上面的读事件,写事件,异常事件,所以要创建三类事件的描述符,分别用来收集事件的描述符,写事件的描述符,调用select()函数,等待事情发生,然后轮训所有事件的描述符的每个描述符,检查是否有事件的发生,如果有就处理,

【poll方式】

和select方式相同,都是创建一个描述符的集合,再去等待事件的发生,然后再去轮询描述符的集合,检查有没有事件的发生。

区别在于:select库需要为读事件,写事件,异常事件分别创建一个描述符的集合,再最后轮询的时候需要轮询三个集合,而poll库只需要创建一个集合,再每个描述符对应的结构上分别设置读事件,写事件,或异常事件,最后轮训的时候,可以同时检查这三个事件的是否发生。

他们的处理方式都是创建了一个待处理事件的列表,然后把这个列表发给内核,返回的时候,再去轮询检查这个列表,以判断是否有事情发生,效率低下。

比较好的做法就是把描述符列表的权限交给内核负责,一旦有事情发生,内核会把发生事件的描述符通知给进程,这样就避免了轮询整个描述符列表。

【epoll方式】

通过相关的调用,通知内核创建了一个描述符的列表,然后给这些描述符设置所关注的事件,并把它添加到内核的事件列表中去,完成设置以后,epoll就开始等待内核通知事件了,某一事件发生以后,内核就将发生事件的描述符上报给epoll库,得知事件列表的epoll库,就开始进行事件的处理了。

epoll有两种模式:水平触发和边缘触发

水平触发:内核通知进程来读取数据,进程没来读取数据,内核需要一次一次通知进程

边缘触发:内核只通知一次让进程来读取数据,进程可以在超时时间内随时来读取数据。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux IO复用是指在处理多个I/O事件时,通过一种机制使得一个进程可以同时监听多个I/O操作,从而提高程序的效率和性能。 在Linux系统中,常用的IO复用机制有三种:selectpollepoll。 1. selectselect函数是最早引入的IO复用机制之一,它通过传入一组文件描述符集合,来监听这些文件描述符上是否有事件发生。当其中任意一个文件描述符上有事件发生时,select函数就会返回,然后程序可以通过遍历文件描述符集合来判断哪些文件描述符上有事件发生。 2. pollpoll函数是对select的改进,其使用方式和select类似。不同的是,poll函数使用一个pollfd结构数组来存储待监听的文件描述符及其对应的感兴趣事件,通过调用poll函数时传入这个数组来实现IO复用。相对于selectpoll没有最大文件描述符数量的限制,并且效率更高。 3. epollepoll是Linux下最新的IO复用机制,它提供了更加高效的IO事件通知机制。epoll使用一个文件描述符来管理被监听的其他文件描述符,通过调用epoll_ctl函数向这个文件描述符中注册或者删除需要监听的文件描述符。当某个文件描述符上有事件发生时,epoll_wait函数会返回该文件描述符的相关信息给程序处理。相对于selectpollepoll在处理大量连接时具有更好的性能。 总结来说,Linux IO复用机制可以让一个进程同时监听多个I/O事件,避免了使用阻塞IO时的等待时间,提高了程序的效率和性能。而selectpollepoll是常用的IO复用机制。其中,epoll是效率最高的一种机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值