[发明专利]基于IO事件通知机制的单进程内容服务器装置及方法无效
申请号: | 200710064157.0 | 申请日: | 2007-03-02 |
公开(公告)号: | CN101256505A | 公开(公告)日: | 2008-09-03 |
发明(设计)人: | 唐晖;赵志军;谭红艳;周旭;唐鼎;林涛 | 申请(专利权)人: | 中国科学院声学研究所 |
主分类号: | G06F9/46 | 分类号: | G06F9/46;H04L29/06 |
代理公司: | 北京泛华伟业知识产权代理有限公司 | 代理人: | 高存秀 |
地址: | 100080北*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 io 事件 通知 机制 进程 内容 服务器 装置 方法 | ||
技术领域
本发明涉及单进程高性能内容服务器的输入输出,特别涉及一种基于IO事件通知机制的单进程高性能内容服务器IO装置及方法。
背景技术
内容分发服务器主要存储多媒体文档,如图形图像,媒体文件等。一个服务器在工作时通常会面对互联网上上万的并发请求,因此对服务器的网络IO(输入输出)和磁盘IO性能要求都很高。
常见的内容服务器IO一般使用多进程或多线程架构。这样做的主要原因是,网络IO和磁盘IO一般都是阻塞同步的,一个进程或线程执行一个连接上的IO操作时,整个进程或线程就被阻塞,无法同时处理其他连接,如果使用多个进程或线程,每个进程或线程对应一个连接,就可以实现并发处理,充分利用CPU资源。
附图1说明了多进程和多线程服务器的一般架构方式。服务器在初始化阶段预先创建多个进程或线程,形成进程池或线程池,其中一个进程或线程是主控进程或主控线程,其他进程或线程为工作进程或工作线程。主控进程或主控线程负责接收网络上到达的客户请求,并将请求分配给进程池或线程池中的工作进程或工作线程处理。工作进程或工作线程处理完毕后等待下一次主控进程或主控线程的调配。这种服务器的代表是Apache,它是目前最流行的Web内容服务器,可以在多进程和多线程两种模式下运行。
多进程服务器可以避免不断创建进程所带来的系统开销。但由于处理请求时它用一个进程来处理一个请求,如果要使服务器能够处理较高的负载,就必须加大预先创建的进程数,而预先创建进程数的上限会受到系统的限制,且进程间切换的开销比较大。另外,在多进程服务器中,进程间的通信和资源共享也很困难。
多线程服务器的优势体现在:一个进程的多个线程在同一进程的地址空间中,容易实现线程间的数据共享;在工作时,创建一个线程比创建一个进程的开销要小;线程的上下文切换发生在同一个进程内,所花费的开销比进程间切换的开销要少。与多进程服务器相比,由于多线程服务器消耗的资源要少,因此多线程服务器的扩展性要高很多。然而,由于在很多操作系统中,比较多数量的用户级线程复用了较少数量的内核执行体。当一个用户级线程调用了一个阻塞的系统调用,它对应的内核执行体也会被阻塞,会导致复用同一个执行体的其他用户级线程也阻塞,影响了系统性能,多线程的服务器的扩展性受到了限制。
由上述说明可见,多进程和多线程服务器都存在不同程度的缺点。于是操作系统提供了一种IO事件通知机制使得在一个线程之内可以并发处理多个网络IO请求。应用程序可以通过这种机制同时监听多个网络套接字,当某个套接字上有IO事件发生时,比如有新数据到达,这个套接字就有可读事件,这个事件及其相关信息可以通过一个系统调用返回到用户空间。结合非阻塞的网络IO,这个机制就能在单个进程或线程内完成并发处理。附图2说明了这种机制的使用流程。Linux/Unix/Windows中的select和poll系统调用、Linux中的epoll系统调用、FreeBSD中的kqueue系统调用都是IO事件通知机制。Lighttpd是单线程Web内容服务器的代表,其性能高于Apache。
由于没有了进程和线程的维护开销,基于IO事件通知机制的单线程服务器克服了前面所述的多进程和多线程服务器的缺点,可以达到很高的扩展性。但是,这种IO事件通知机制一般只能处理网络套接字的事件,不适用于磁盘文件描述符。而目前的服务器所服务的内容越来越大,无法存放在内存中,因此大量的磁盘IO在服务器中是不可避免的。但是当前操作系统中的磁盘IO一般都是同步阻塞的,所以单线程的服务器会因为磁盘IO而阻塞,服务器无法处理其他请求,使得服务器的性能下降。
发明内容
本发明的目的是克服单线程的服务器会因为磁盘IO而阻塞,服务器无法处理其他请求,使得服务器性能下降的缺陷,从而提供一种单进程高性能内容服务器的IO装置。
为了实现上述目的,本发明提供了一种基于IO事件通知机制的单进程高性能内容服务器IO装置,包括请求队列,还包括前台线程、后台线程池和IO事件通知机制;其中,所述的前台线程与所述的请求队列、IO事件通知机制相连,所述的请求队列和所述的IO事件通知机制还连接到所述的后台线程池上,所述的前台线程还与外部的客户端连接。
上述技术方案中,所述的前台线程是一个单一的线程,所述的前台线程负责接受外部客户端发来的新的网络连接,还负责发送和接收网络协议数据。
上述技术方案中,所述的后台线程池包括一个以上的工作线程,所述工作线程用于处理磁盘的IO操作。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院声学研究所,未经中国科学院声学研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200710064157.0/2.html,转载请声明来源钻瓜专利网。