#include<iostream>#include<unistd.h>#include<cstdio>// 阻塞IOintmain(){char buffer[1024];// 读取标准输入中的数据while(true){printf("Enter#");fflush(stdout);int n=read(0,buffer,sizeof(buffer)-1);if(n==0){// 说明没有读取到continue;}elseif(n>0){//读取到了数据buffer[n]=0;std:...
具体类型有:EPOLLIN:表示对应的文件描述符可读EPOLLOUT:表示对应的文件描述符可写EPOLLPRI:表示对应的文件描述符有紧急的数据可读EPOLLERR:表示对应的文件描述符发生错误EPOLLHUP:表示对应的文件描述符被挂断EPOLLLET:将EPOLL设置为边缘触发模式EPOLLONESHOT:只监听一次事件...
linux的五种IO模型,分别是:阻塞IO、非阻塞IO、多路复用IO、信号驱动IO以及异步IO。其中阻塞IO、非阻塞IO、多路复用IO、信号驱动IO都属于同步IO。 回到顶部 同步IO和异步IO 同步IO:导致请求进程阻塞,直到I/O操作完成。(应用程序主动向内核查询是否有可用数据,如果有,则再次阻塞,自己调用函数将数据从内核copy到用户空...
8|1阻塞IO模型 进程会一直阻塞,直到数据拷贝完成 应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好。数据准备好后,从内核拷贝到用户空间,IO函数返回成功指示。阻塞IO模型图 8|2非阻塞IO模型 通过进程反复调用IO函数,在数据拷贝过程中,进程是阻塞的。模型图如下所示: 8|3IO复用模型 主要是select和epoll。...
阻塞(阻塞IO)。 轮询(非阻塞IO)。 信号通知(信号驱动IO)。 (内核空间和用户空间数据同步由谁发起是分析Linux IO模型最核心问题) 2.2 阻塞IO 阻塞IO/阶段1 用户程序调用recv函数发起IO请求(同步IO),读取socket缓冲区数据。 由于socket缓冲区没有就绪数据包,进程状态将从TASK_RUNNING切换至TASK_INTERRUPTIBLE状态,并...
Linux里有五种IO模型:阻塞IO、非阻塞IO、多路复用IO、信号驱动式IO和异步IO,我发现这五种IO模型,其实能和吃饭这件事关联起来。 阻塞IO(Blocking I/O) 阻塞IO是最常见的IO模型。 当发起一个IO操作时,比如读取数据,系统会调用read()函数。如果请求的数据没有准备好,此时进程会被挂起(blocked),进入等待状态。直...
非阻塞IO:如果应用发起读取数据申请时,内核数据没有准备好,系统调用会立即返回,并返回EWOULDBLOCK错误码,告诉应用当前没有数据可读。 多路复用模型:一个线程监控多个网络请求(通过文件描述符fd来标识),完成数据状态询问的操作。当有数据准备就绪后,再分配对应的线程去读取数据,这样可以节省大量线程资源。 信号驱动IO:在...
Linux系统为我们提供了五种可用的IO模型,分别是阻塞式IO、非阻塞式IO、IO多路复用、信号驱动式IO和异步IO。这些模型的作用是让应用程序能够更好地管理和处理输入输出操作。 阻塞式IO:简单易用,但效率不高。 非阻塞式IO:可以让应用程序在等待数据准备完成的过程中执行其他操作,但需要应用程序不断轮询内核缓冲区。