IO多路复用

Posted python-road

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IO多路复用相关的知识,希望对你有一定的参考价值。

IO 多路复用:

用户空间与内核空间:

   操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的     所有权限;为了保证用户进程不能直接操作内核,操作系统将虚拟空间划分为两部分:1.内核空间,2.用       户空间,Linux将1G的空间划分为内核空间,3G的为用户空间

文件描述符fd:

   其形式上是一个非负整数,实际上是一个索引值,指向内核为每个进程所维护的该进程打开文件的记录         表,当程序打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符;文件描述符这一概     念  只适用于Linux系统

缓存I/O

  又称为标准I/O,数据会先被拷贝到操作系统的内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝    到应用程序的地址空间

IO模式:

当一个read操作发生时,他会经历两个阶段:

1.等待数据准备(存到缓冲区)

2.将数据从内核拷贝到进程中

Linux操作系统的五种网络模式的方案:

1.阻塞I/O:特点:在IO执行的两个阶段都被阻塞了

2.非阻塞I/O:特点:如果数据没准备好,不会阻塞,会直接返回错误;用户进程需要不断的主动询问数                                      据好了没有

3.I/O多路复用:就是select,poll,epoll特点:通过一种机制使一个进程能同时等待多个文件描述符,而                               这些文件描述符,其中的任意一个进入读就绪状态,select()函树就返回;

4.信号驱动I/O

5.异步I/O:用户进程发起read操作之后,立刻可以开始做其他事,而对于内核kernel来说,当他收到一个                       asynchronous read(异步读)之后,首先它会立刻返回,所以不会对用户进程产生任何阻塞,                     然后,kernel会等数据准备完成后将数据拷贝到用户内存,当这一切都完成后,kernel就会给用                   户进程发送一个signal,告诉它read操作完成了

阻塞IO,非阻塞IO和IO多路复用都是同步IO;异步IO就是异步IO

IO多路复用:

epoll:当内存有数据时,直接返回给用户程序让用户程序取数据,并发送给用户该数据的文件描述符,如果用户不取,下次继续发送,则是“水平触发”。如果用户不取,下次不再发送,则是“边缘触发”

 

以上是关于IO多路复用的主要内容,如果未能解决你的问题,请参考以下文章

非阻塞套接字与IO多路复用

IO多路复用/基于IO多路复用+socket实现并发请求/协程

IO多路复用, 基于IO多路复用+socket实现并发请求(一个线程100个请求), 协程

NIO和IO多路复用

io多路复用简介

io多路复用简介