epoll的用法
epoll的用法
epoll get started
这一章先了解epoll的用法,epoll是一个多路复用器,用来在单线程中处理多个socket链接,它由3个函数组成:
int epoll_create(int size);
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);
poll_create
用来创建一个epoll对象,虽然是个对象它却返回个int,c又是面向过程的语言? 这是为什么呢?
- epoll是linux的概念,linux又是一切皆文件,epoll也被抽象成一个文件(可读、可写),它是操作系统的抽象,不是C语言的。
- linux 内核中的文件用文件描述符表示(file descriptor, int类型),所以用int就可以表示一个epoll对象
参数解释:
size
参数表示最大管理的socket数量。
epoll_ctl
用来管理epoll对象中的链接,比如有新客户端链接了,可以使用它把新链接交给epoll监控。
参数解释:
-
epfd
是epoll对象 -
socket链接也被抽象成文件描述符,
fd
是要操作(添加、移除)的socket链接 -
op
, operation,操作类型,比如添加、移除 -
*event
用来设置监听的事件类型,比如有读事件来来,唤醒线程处理
epoll_wait
用阻塞当前线程,等待新事件到来,服务端所有的事情都做完就可以调用它来等待有人链接服务端或者发送数据给服务端。
参数解释:
epfd
是epoll对象*events
是一个数组,epoll 把 IO事件放到这个数组里,epoll_wait结束后从它里读取ready的事件maxevent
放*events
的长度即可timeout
超时时间