美文网首页
Linux IO多路复用底层原理(刚接触,知识还不成体系,等懂得

Linux IO多路复用底层原理(刚接触,知识还不成体系,等懂得

作者: 极地冰凌_25bf | 来源:发表于2021-08-03 19:34 被阅读0次
    Linux 操作系统中断
    1. 什么是系统中断

      系统处理中断的过程: 首先由需要紧急处理的程序向处理器发送中断请求,处理器收到请求后进行中断响应
      暂停现行程序,并保存(现行程序的现场),然后引出中断处理程序处理。中断处理程序(中断处理服务程序)
      会转而从等待队列中取出进程并调入运行队列中

      • 中断:是处理器对软件发出的需要关注的事件的响应。是用来处理中断请求的。它能使处理器在运行过程中对外部事件发出的 中断请求进行及时地处理,处理完成后又立刻返回断点,继续进行处理器原来的工作。

      • 中断请求:是由"紧急事件"向处理器发出的申请,这个申请请求处理器先停下"自己手头的工作",然后处理发出申请的"紧急事件"

      • 中断响应:是中央处理器发现已有中断请求时,暂停现行的程序保存现行程序的状态(现场),并自动引出中断处理程序的过程

      系统处理中断的过程
      • 硬中断: 一般都是由外部硬件发出的(比如键盘,鼠标,网卡等)中断,一般是异步的随时可能发生的中断。
        • 异步中断:指cpu外部产生的,对于执行程序来说,这种中断完全是异步的,因为不知道什么时候发生cpu对其的响应完全是被动的
      • 软中断: 也称内中断,是由执行某些指令引起的
    2. BIO和NIO

      • BIO: Blocked IO 阻塞IO当试图对文件进行读写时,如果当时没有东西可读,或者暂时不可写,程序就进入等待状态,直到有东西可读或者可写为止(强迫症,必须这件事做完才能做其他的事,否则一直等待)
      • NIO: Non Blocked Io 非阻塞IO,如果没有东西可读,或者不可写,读写函数马上返回,而不会等待(先取号,可以去做其他事情,叫号后,过来完成该事情。)
    Linux IO多路复用

    IO多路复用的本质时通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪,能够通知程序进行相应的读写操作

    1. select的工作原理
      select通过轮询来检测各个集合中的描述符的状态,如果描述符的状态发生改变,则会在该集合中设置相应的标志位;如果指定描述符的状态没有发生改变,则将该描述符从对应集合中移除

      以一个保姆照看一群孩子,如果把孩子是否需要尿尿比作网络IO事件,select的作用就好比这个保姆改革询问每个孩子:你要尿尿吗?如果孩子回答是,保姆则把孩子拎出来放到另一个地方。当所有孩子询问完之后保姆领着这些要尿尿的孩子去上厕所(处理网络IO事件)

    2. epoll工作原理
      epoll是select/poll的增强版本,它能显著提高程序在并发连接中只有少量活跃的情况下的系统cpu利用率。它无需便利整个被监听的描述符集,只需要便利那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行

      同样用保姆的例子,epoll中,保姆不需要挨个询问每个孩子是否需要尿尿。每个孩子如果需要尿尿,就自己占到事先约定好的地方,保姆只需要去事先约定好的地方查看。如果有小孩,则领着孩子去上厕所撒尿就行。

    相关文章

      网友评论

          本文标题:Linux IO多路复用底层原理(刚接触,知识还不成体系,等懂得

          本文链接:https://www.haomeiwen.com/subject/xwwevltx.html