windows并行文件系统 python3之协程(6)

电脑杂谈  发布时间:2018-02-22 14:45:48  来源:网络整理

另一个本质的改进在于epoll采用基于事件的就绪通知方式。在select/poll中,进程只有在调用一定的方法后,内核才对所有监视的文件描述符进行扫描,而epoll事先通过epoll_ctl()来注册一个文件描述符,一旦基于某个文件描述符就绪时,内核会采用类似callback的回调机制,迅速激活这个文件描述符,当进程调用epoll_wait()时便得到通知。

select

select(rlist,wlist,xlist,timeout=None)

select函数监视的文件描述符分3类,分别是writefds、readfds、和exceptfds。

调用后select函数会阻塞,直到有描述符就绪(有数据可读、可写、或者有except),或者超时(timeout指定等待时间,如果立即返回设为null即可),函数返回。当select函数返回后,可以通过遍历fdset,来找到就绪的描述符。

poll

int poll(struct pollfd *fds,unsigned int nfds,int timeout);

不同于select使用三个位图来表示三个fdset的方式,poll使用一个pollfd的指针实现。

pollfd结构包含了要监视的event和发生的event,不再使用select“参数-值”传递的方式。同时,pollfd并没有最大数量限制(但是数量过大后性能也是会下降)。和select函数一样,poll返回后,需要轮询pollfd来获取就绪的描述符。

从上面看,select和poll都需要在返回后,通过遍历文件描述符来获取已经就绪的socket。

事实上,同时连接的大量客户端在一时刻可能只有很少的处于就绪状态,因此随着监视的描述符数量的增长,其效率也会线性下降。

epool

epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。

epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。

epoll操作过程需要三个接口,分别如下:

(1)int epool_create(int size);

创建一个epoll的句柄,size用来告诉内核这个的数目一共有多大,这个参数不同于select()中的第一个参数,给出最大的fd+1的值,参数size并不是限制了epoll所能的描述符最大个数,只是对内核初始分配内部数据结构的一个建议。

当创建好epoll句柄后,它就会占用一个fd值,在linux下如果查看/proc/进程id/fd/,是能够看到这个fd的,所以在使用完epoll后,必须调用close()关闭,否则可能导致fd被耗尽。

(2)int epool_ctl(int epfd,int op,int fd,struct epoll_event *event);

函数是对指定描述符fd执行op操作。

epfd:是epoll_create()的返回值。windows并行文件系统

op:表示op操作,用三个宏来表示:

添加EPOLL_CTL_ADD,删除EPOLL_CTL_DEL,修改EPOLL_CTL_MOD。

分别添加、删除和修改对fd的事件。

fd:是需要的fd(文件描述符)

epoll_event:是告诉内核需要什么事

(3)int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout);

等待epfd上的io事件,最多返回maxevents个事件。

参数events用来从内核得到事件的集合,maxevents告之内核这个events有多大,这个maxevents的值不能大于创建epoll_create()时的size,参数timeout是超时时间(毫秒,0会立即返回,-1将不确定,也有说法说是永久阻塞)。该函数返回需要处理的事件数目,如返回0表示已超时。

一个简单的select多并发socket服务端代码:

select多并发socket客户端代码:

epoll多并发socket服务端代码如下:

5、python之selectors模块

selectors模块是在python3.4版本中引进的,它封装了IO多路复用中的select和epoll,能够更快,更方便的实现多并发效果。

官方文档见:https://docs.python.org/3/library/selectors.html

以下是一个selectors模块的代码示范:


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-88904-6.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 天地总子
      天地总子

      从经济学角度来看

    • 卫宗武
      卫宗武

      他必须在全球政治军事经济利益中角逐

    热点图片
    拼命载入中...