epoll原理与实战

上传人:小*** 文档编号:242969726 上传时间:2024-09-13 格式:PPT 页数:38 大小:483.97KB
返回 下载 相关 举报
epoll原理与实战_第1页
第1页 / 共38页
epoll原理与实战_第2页
第2页 / 共38页
epoll原理与实战_第3页
第3页 / 共38页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,5/15/2014,#,linux,高性能服务器编程之,epoll,原理与实战,系统研发部,丁玉杰,IO,模型,(,I/O Models,),Blocking I/O,Non-blocking I/O,I/O multiplexing ,select,(),poll(),epoll(),kqueue(),.,Signal driven I/O,Asynchronous I/O,Blocking,I/O,recvfrom(),No datagram ready,datagram ready,Copy datagram,Copy complete,Process datagram,System call,Application,Operating system,Wait for data,Copy data to user,Return ok,Process blocks,Non-Blocking,I/O,recvfrom(),No datagram ready,datagram ready,Copy datagram,Copy complete,Process datagram,System call,Application,Operating system,Copy data to user,Return ok,Process blocks,EWOULDBLOCK,recvfrom(),No datagram ready,System call,EWOULDBLOCK,recvfrom(),System call,什么是,I/O,Multiplexing,When an application needs to handle multiple I/O descriptors at the same,time.,E.g,. file and socket descriptors, multiple socket,descriptors,I/O Multiplexing,select(),No datagram ready,datagram ready,Copy datagram,Copy complete,Process datagram,System call,Application,Operating system,Wait for data,Copy data to user,Return ok,Process blocks,Return readable,Process blocks,recvfrom(),System call,Signal,driven I/O,Establish SIGIO,Signal handler,No datagram ready,datagram ready,Copy datagram,Copy complete,Process datagram,System call,Application,Operating system,Wait for data,Copy data to user,Return ok,Process blocks,Deliver SIGIO,Process continues,recvfrom(),System call,Signal Handler,Asynchronous,I/O,aio_read(),No datagram ready,datagram ready,Copy datagram,Copy complete,Signal handler,Process datagram,System call,Application,Operating system,Wait for data,Copy data to user,Return ok,Process continues,return,高,性能,I/O,设计模式,Reactor,和,Proactor,同步阻塞,IO,在此种方式下,用户进程在发起一个,IO,操作以后,必须等待,IO,操作的完成,只有当真正完成了,IO,操作以后,用户进程才能运行。,JAVA,传统的,IO,模型属于此种方式!,同步非阻塞,IO,在此种方式下,用户进程发起一个,IO,操作以后边可返回做其它事情,但是用户进程需要时不时的询问,IO,操作是否就绪,这就要求用户进程不停的去询问,从而引入不必要的,CPU,资源浪费。其中目前,JAVA,的,NIO,就属于同步非阻塞,IO,。,异步阻塞,IO,此种方式下是指应用发起一个,IO,操作以后,不等待内核,IO,操作的完成,等内核完成,IO,操作以后会通知应用程序,这其实就是同步和异步最关键的区别,同步必须等待或者主动的去询问,IO,是否完成,,那么为什么说是阻塞的呢,?,因为此时是通过,select,系统调用来完成的,而,select,函数本身的实现方式是阻塞的,而采用,select,函数有个好处就是它可以同时监听多个文件,句柄,从而,提高系统的并发性!,异步非阻塞,IO,在此种模式下,用户进程只需要发起一个,IO,操作然后立即返回,等,IO,操作真正的完成以后,应用程序会得到,IO,操作完成的通知,此时用户进程只需要对数据进行处理就好了,不需要进行实际的,IO,读写操作,因为真正的,IO,读取或者写入操作已经由内核完成了。目前,Java,中还没有支持此种,IO,模型。,Reactor,模式,应用程序注册读就绪事件和相关联的事件处理器,事件分离器等待事件的发生,当发生读就绪事件的时候,事件分离器调用第一步注册的事件处理器,事件处理器首先执行实际的读取操作,然后根据读取到的内容进行进一步的处理,写入操作类似于读取操作,只不过第一步注册的是写就绪事件。,Reactor,实例,Proactor,模式,应用程序初始化一个异步读取操作,然后注册相应的事件处理器,此时事件处理器不关注读取就绪事件,而是关注读取完成事件,这是区别于,Reactor,的关键。,事件分离器等待读取操作完成事件,在事件分离器等待读取操作完成的时候,操作系统调用内核线程完成读取操作(异步,IO,都是操作系统负责将数据读写到应用传递进来的缓冲区供应用程序操作,操作系统扮演了重要角色),并将读取的内容放入用户传递过来的缓存区中。这也是区别于,Reactor,的一点,,Proactor,中,应用程序需要传递缓存区。,事件分离器捕获到读取完成事件后,激活应用程序注册的事件处理器,事件处理器直接从缓存区读取数据,而不需要进行实际的读取操作。,Proactor,实例,使用同步,I/O,模拟,Procator,模式,使用场景,Boost,asio,和,ACE,都支持,Proactor,模式,而,ACE,也支持,Reactor,模式,Windows,下,IOCP,就是典型的,Proactor,,,linux,下的应用由于内核支持方面的问题,多数是,Reactor,Comparing Two High-Performance I/O Design Patterns,e,poll,是什么?,epoll,是多路复用,IO(I/O Multiplexing),中的一种方式,于,Linux 2.5.44,首度登场的,epoll,是,Linux,核心的可扩展,I/O,事件通知,机制。,它设计目的只在取代既有,POSIX select(2),与,poll(2),系统函式,让需要大量操作档案描述子的程式得以发挥更优异的性能,(,举例来说:旧有的系统函式所花费的时间复杂度为,O(n),,,epoll,则耗时,O(1,),。,epoll,与,FreeBSD,的,kqueue,类似,底层都是由可组态的操作系统核心物件建构而成,并以档案描述符,(file descriptor),的形式呈现于使用者空间,。,http,:/,zh.wikipedia.org/wiki/Epoll,m,an epoll,e,poll,的使用,epoll_create,epoll_wait,epoll_ctl,ET,与,LT,e,poll_create,Man epoll_create:,#include,int,epoll_create(int size,);,Since Linux 2.6.8, the size argument is unused. (The kernel dynamically sizes,the required data structures without needing this initial hint.),Linux-2.6.32/fs/eventpoll.c:,SYSCALL_DEFINE1(epoll_create, int, size),if (size ffd.file-f_op-poll(epi-ffd.file, NULL),&,epi,-event.events,;,list_del_init,(,if (revents) ,if (_put_user(revents, &uevent-events) |,_put_user(epi-event.data, &uevent-data) ,list_add(,return eventcnt ? eventcnt : -EFAULT;,eventcnt+;,uevent+;,if,(!(epi-event.events & EPOLLET) ,list_add_tail,(,事件从哪里来?,wake_up_interruptible_sync_poll(sk-,sk_sleep, POLLIN |POLLRDNORM |,POLLRDBAND);,回调:,ep_poll_callback,(),动作:将,就绪文件的,epitem,添加到,rdlist,触,发函数:,sock_def_readable, sock_def_write_space, sock_def_error_report,可读与可写,读事件,新连接到来,新数据到来,对端,f,关闭,(fin),或者,reset,写事件,其实并没有所谓的写事件(相对于对于读事件来说),新连接建立,缓冲区可写,epoll,的应用,nginx,ET,模式的代表,redis,LT,模式的代表,l,ibev,,,libevent,,,muduo,,,n,ginx,中的,epoll,http,代理服务器同时涉及上下游连接,,需,要更多的考虑,eg.,stale,event,(man epoll),active, ready,http,协议驱动的,epoll,eg,.,ngx_http_block_reading,首次直接读写,n,gx_add_event,返回,EAGAIN,tricks,eg.,ngx_xxx_empty_handler,定时,器,r,edis,中的,epoll,n,osql,,非,http,业务,t,cp,无,stale event,f,d,数组,实现分离容易,参考资料:,http:/liuxun.org/blog/reactor-he-proactor-mo-shi-bi-jiao,/,http:/, Two High-Performance I/O,Design Patterns,Linux,高性能服务器编程,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!