首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

IO复用——select函数

I/O复用——select函数 select函数 select函数让进程告诉内核,等待数个事件,某个事件发生或者达到指定时间时,唤醒进程。...描述字集合的几个参数均为值-结果参数,内核返回的时候会修改它们的值,告诉进程哪些描述字已经准备好。...由于我们对结果的关注,所以一定要注意第一个参数的正确性,否则本该置为1的描述字可能会被置为0。 函数的返回值表示所有三个描述字集中已经准备好的总位数,有三种情况: 返回0。...[函数str_cli中由select处理的条件] 修改函数str_cli [str_cli函数select版本与初始版本对比] 使用函数select 在新版的str_cli函数中,使用select函数,...处理可读套接口 如果select返回套接口可读,则读取数据并输出打印。 处理标准输入 如果select返回标准输入可读,则调用fgets阻塞读入一行,并写到套接口。

1.1K51
您找到你想要的搜索结果了吗?
是的
没有找到

多路IO复用模型 select epoll 等

多路IO复用提供了对大量文件描述符进行就绪检查的高性能方案。 select select诞生于4.2BSD,在几乎所有平台上都支持,其良好的跨平台支持是它的主要的也是为数不多的优点之一。...select的缺点(1)单个进程能够监视的文件描述符的数量存在最大限制(2)select需要复制大量的句柄数据结构,产生巨大的开销 (3)select返回的是含有整个句柄的列表,应用程序需要遍历整个列表才能发现哪些句柄发生了事件...poll和select是名字不同的孪生兄弟,除了没有监视文件数量的限制,select后面3条缺点同样适用于poll。 面对select和poll的缺陷,不同的OS做出了不同的解决方案,可谓百花齐放。...epoll epoll诞生于Linux 2.6内核,被公认为是Linux2.6下性能最好的多路IO复用方法。...select模式低效的原因 select 模式低效是由select的定义所决定的,与操作系统实现无关,任何内核在实现select时必须做轮循,才能知道这些socket的情况,这是会消耗 cpu的。

58421

python IO多路复用select

第三种IO多路复用模型,就是本文要重点介绍的一种方式。select就是诞生最早也是最为典型的一种IO多路复用模型。前面我们提到,python中的IO操作有三种,file、socket和stdin。...但是select既然叫做IO多路复用模型,它就可以实现实现同时对多路端口访问的监听。因为select是通过句柄的变化来感知客户端接入的。...del message[w] IO多路复用模型是建立在内核提供的多路分离函数select基础之上的,使用select函数可以避免同步非阻塞IO模型中轮询等待的问题。...还有一种IO模型称为异步IO,上文我们介绍的IO多路复用又被称为异步阻塞。因为当客户端访问连接入select之后,客户端就的线程其实就被select阻塞了。...IO多路复用与异步IO linux下的异步IO其实用得很少 当用户进程调用了select,那么整个进程会被block,而同时,kernel会“监视”所有select负责的socket,当任何一个socket

47720

IO 多路复用select, poll, epoll

网络带宽较为简单,带宽大小,基本脱离软件领域设计硬件层面,而操作系统涉及 I/O 就必然离不开select,poll 和 epoll了。...selectselect 是通过将文件连接后所有的文件描述符放入一个集合中,当调用 select 函数会把所有文件描述符集合拷贝到内核,然后内核遍历整个集合,有事件发生时候,对这个 socket 进行标记...select 函数实现如下:void handle_next(int sockfd){ fd_set rfds, rset; //声明文件描述符集合 FD_ZERO(...EPOLL_CTL_DEL, clientfd, &ev);break;} else {printf("Recv: %s, %d Bytes\n", buffer, ret);}}}}}至此,I/O 多路复用就结束了...,所谓多路复用就是将所有文件描述维护起来,当然这个过程主要是内核层面完成,用户层面是不是也可以进行维护呢?

7400

linux 网络编程 IO复用 select,poll ,epoll

核心思想:I/O复用 ---- 使用情景: 客户端程序要同时处理多个socket 客户端程序要同时处理用户输入和网络连接 TCP服务器要同时处理监听socket和连接socket,这是使用最多的场合...select API 原型: [cpp] view plaincopy #include  int select ( int nfds, fd_set* readfds...如果在超时时间内没有任何文件描述符就绪,select将返回0....select失败时返回-1并设置errno 如果select 等待期间,程序接收到信号,则select立即返回-1,并设置errno为EINTR。...---- 小结:三组I/O复用函数的比较 系统调用 select poll epoll 事件集合 用哦过户通过3个参数分别传入感兴趣的可读,可写及异常等事件 内核通过对这些参数的在线修改来反馈其中的就绪事件

2.6K20

从Go编程看IO多路复用Select

IO多路复用通过某种机制使进程监听某些文件描述符,当文件描述符中有读或写就绪时,进程能够收到系统内核发送的相应通知从而进行相应的IO操作;IO多路复用有:select、poll、epoll等模式,这里主要介绍...selectselect本质上也是同步IO,调用时阻塞自己,IO事件就绪后被唤醒返回负责读写操作; 在Go中其函数定义如下: func Select(nfd int, r *FdSet, w *FdSet...函数实现IO多路复用,通过其参数通知内核:    1、关注的文件描述符    2、关心的文件描述符的哪种状态:可读、可写还是异常    3、等待时间,无限等待阻塞或是固定超时时间 函数参数   通过上面的介绍可以知道我们需要有这么几种参数传递给...的相关问题:   1、内核将消息传递到用户空间需要执行系统拷贝,如监听了大量fd会导致性能下降   2、每次调用select都需要从用户态拷贝fd集合到内核态   3、每次调用select内核态都需要遍历传进来的所有...fd集合   4、默认select支持的fd集合过小,只有1024;   5、轮询效率低,每次调用select、内核通知都需要轮询整个fd集合 Go中的代码实现: func SelectIO(fd int

70150
领券