Linux IO多路复用 poll
Linux IO多路复用 poll

之前曾经提到过 select
poll 跟select类似,poll改进了select的一个确定,就是poll没有监听上限
不过poll还是需要遍历以及频繁的把数组拷贝到内核空间,在监听较多文件描述符的时候性能会下降
#include <poll.h>
int poll(struct pollfd *fds, nfds_t nfds, int timeout);
传递的三个参数
fds:结构体数组
nfds:监听数量,(select 是最大文件描述符的值)
timeout:超时时间
我们再来看一下这个结构体
struct pollfd {
int fd; /* file descriptor */
short events; /* requested events */
short revents; /* returned events */
};
第一个fd肯定是要监听的文件描述符
第二个是期望监听的事件
第三个是返回的事件
事件的具体定义在 poll.h中

可以同时监听多个事件
//具体可见 bits/poll.h
#define POLLIN 0x001 /* There is data to read. */
#define POLLPRI 0x002 /* There is urgent data to read. */
#define POLLOUT 0x004 /* Writing now will not block. */
这几个只要按位或就可以监听多个数据了
当poll返回的时候,我们也可以test事件(按位与),不过需要对数组进行遍历
RETURN VALUE
On success, a positive number is returned; this is the number of struc‐
tures which have nonzero revents fields (in other words, those descrip‐
tors with events or errors reported). A value of 0 indicates that the
call timed out and no file descriptors were ready. On error, -1 is
returned, and errno is set appropriately.
调用成功的时候返回一个正数(监听就绪结构体的数量),-1出错,他会设置errno,0是超时,没有文件名准备好
poll简单来讲跟select差不多,都是同步非阻塞,效率都不是很高,一般都是用epoll代替,不过poll把结构体拷贝到内核空间的时候好像是用链表表示的,所以没有上限,但是涉及到巨量拷贝效率还是很低,使用的时候还是要遍历,我并没有看源码,挖个坑有机会补一下
实例可以参考下面这个链接,这里挖个坑,以后再补
https://www.cnblogs.com/Anker/p/3261006.html
同步异步不过不太清楚的可以具体看看这个文章,写的很好
https://www.cnblogs.com/euphie/p/6376508.html
Linux IO多路复用 poll的更多相关文章
- linux IO多路复用POLL机制深入分析
POLL机制的作用这里就不进行介绍,根据linux man手册,解释为在一个文件描述符上等待某个事件.按照抽象一点的理解,当某个事件被触发(条件被满足),文件描述符变为有状态,那么用户空间可以根据此进 ...
- 【知乎网】Linux IO 多路复用 是什么意思?
提问一: Linux IO多路复用有 epoll, poll, select,知道epoll性能比其他几者要好.也在网上查了一下这几者的区别,表示没有弄明白. IO多路复用是什么意思,在实际的应用中是 ...
- IO多路复用——poll
1.基本知识 poll是Linux中的字符设备驱动中的一个函数.Linux 2.5.44版本后,poll被epoll取代.和select实现的功能差不多,poll的作用是把当前的文件指针挂到等待队列. ...
- Linux IO多路复用
监听文件描述符的状态来进行相应的读写操作,3个函数: 123 selectpollepoll 123456789 int (int nfds, fd_set *readfds, fd_set *wri ...
- Linux IO多路复用 select
Linux IO多路复用 select 之前曾经写过简单的服务器,服务器是用多线程阻塞,客户端每一帧是用非阻塞实现的 后来发现select可以用来多路IO复用,就是说可以把服务器这么多线程放在一个线程 ...
- Linux IO多路复用 select/poll/epoll
Select -- synchronius I/O multiplexing select, FS_SET,FD_CLR,FD_ISSET,FD_ZERO #include <sys/time. ...
- Linux IO 多路复用是什么意思?
写在前面:本文整理于知乎,原文链接为http://www.zhihu.com/question/32163005/answer/55772739,作者:罗志宇 再次向作者表示感谢~~ 假设你是一个机场 ...
- Linux IO多路复用之epoll网络编程及源码(转)
原文: 前言 本章节是用基本的Linux基本函数加上epoll调用编写一个完整的服务器和客户端例子,可在Linux上运行,客户端和服务端的功能如下: 客户端从标准输入读入一行,发送到服务端 服务端从网 ...
- Linux IO多路复用之epoll网络编程(含源码)
前言 本章节是用基本的Linux基本函数加上epoll调用编写一个完整的服务器和客户端例子,可在Linux上运行,客户端和服务端的功能如下: 客户端从标准输入读入一行,发送到服务端 服务端从网络读取一 ...
随机推荐
- Ionic控件之——按钮(Button)
Ionic提供丰富的按钮特性,足以满足大部分的按钮实现需求. 一.HTML实现一个简单按钮: <button class="button"> 我是按钮 </but ...
- 为OS X增加环境变量
1.创建并以 TextEdit 的方式打开 ~/.bash_profile 文件 touch ~/.bash_profile; open -t ~/.bash_profile 2.新增环境变量 exp ...
- ASP.NET 控件不可编辑
前台页面的解析后的html代码为disabled="disabled",而在后台我们需要设置控件的Enabled=false:即可.
- [EffectiveC++]item20:Prefer pass-by-reference-to-const to pass-by-value
- java继承-静态绑定和动态绑定
静态绑定和动态绑定: 静态:程序执行前方法已经被绑定,针对java简单可以理解为程序编译器已的绑定(静态绑定)java当中的方法是final.static.private构造方法都是前期绑定 动态:运 ...
- java 方法修改主函数里基本数据类型和引用数据类型的区别
public class Dog { public void Age(int age) {//副本新建的age age++;//对副本修改 System.out.println(age); } pub ...
- 7、Python文件操作工具 openpyxl 工具 2
创建一个工作簿 使用openpyxl没有必要先在系统中新建一个.xlsx,我们需要做的只需要引入Workbook这个类,接着开始调用它. >>> from openpyxl impo ...
- JS实现图片上传之前先预览
<html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat=&quo ...
- python 中的Array,Value及内存共享
官网文档的例子 from multiprocessing import Process, Value, Array def f(n, a): n.value = 3.1415927 for i in ...
- 2018-2019-2 网络对抗技术 20165322 Exp2 后门原理与实践
2018-2019-2 网络对抗技术 20165322 Exp2 后门原理与实践 目录 实验准备 后门概念 常用后门工具 实验内容与步骤 使用netcat获取主机操作Shell,cron启动 使用so ...