io酒窖设计iocellar顺序

高性能IO设计模式及其应用
想当然的服务器设计模式
服务器一般需要支持高性能的I/O,大并发等。先来看看大多数工程师准备自主开发一个服务器之前,自然而然想到的一些设计模式。准确的讲是实现的方法,远远谈不上设计模式。
第一种实现一个服务器的想当然的方法是,当有请求过来时,就fork一个子进程进行处理。下面这段示例代码是一个按照这种方法实现的服务器。这种方法易于理解,实现简单,如果并发量比较小,应该也能应付。但是如果是高并发的服务器就不理想了,因为fork大量的进程,并在不同的进程之间切换会消耗大量资源,造成服务器运行的效率下降。
int main(int
argc, char **argv)
&&& listenfd =
Socket (AF_INET, SOCK_STREAM, 0);
Bind(listenfd, (SA *) &servaddr,
sizeof(servaddr));
Listen(listenfd, LISTENQ);
&&& for ( ; ;
connfd = Accept(listenfd, (SA *) &cliaddr,
if ( (childpid = Fork()) == 0) {
&&&&&&&&&&&
process(connfd);&&
&&&&&&&&&&&
第二种实现服务器的方法是所谓的preforking,也就是预先创建”足够的“进程,每个进程通过accept阻塞在被侦听的端口上。也就是所谓的线程池的方法。这里不再示例代码,想了解细节请参照《UNIX
Network Programming Volume 1, Third Edition》的30.6。
顺便提一下,第二种实现服务器的方法中,多个线程阻塞在同一个侦听端口上accept,存在所谓的 thundering
herd 问题,因此select(epoll,kqueue,iocp)就成了服务器编程的想当然的选择。
高性能I/O设计模式 - Reactor
Reactor设计模式中的要素如下:
Handles,也就是网络连接,文件句柄等。是事件源。
Synchronous Event
Demultiplexer,同步事件的解复用(或者说派发),具体的比如select调用。比select更加高效的有linux下的epoll,freebsd下的kqueue以及windows下的iocp(IO
Completion
Initiation Dispatcher,注册、移除和分派事件处理句柄。
Event Handler,就是事件处理句柄。
结合上面的描述,给出来自参考资料[3]图片如下:
无论是Reator还是Proactor,都包含了事件分离器和事件处理器。在接下来的对于Darwin视频服务器的分析中会发现其中也包含了事件分离器和事件处理器。
如下图所示,Reactor模式运行的顺序如下:
应用程序调用Initiation_Dispatcher注册一个Event_Handler,并给出对应的。Handler及事件类型。
注册完所有的Event_Handler后启动监听事件。
当有事件发生时,Synchronous Event Demultiplexer通知Initiation
Dispatcher。
Initiation Dispatcher触发与Handler对应的Event Handler。
Reactor设计模式相关产品
QuickTime Streaming Server Modules Programming Guide。
libevent,跨平台的Reactor的实现,地址:
libev,同libevent类似,据说性能稍好,地址:
我的更多文章:
( 17:45:33)( 14:33:22)( 21:35:30)( 15:21:10)( 21:24:44)( 23:47:32)( 15:11:04)
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。第三方登录:存储IO设计和性能调优
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
存储IO设计和性能调优
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 io流的关闭顺序 的文章

 

随机推荐