专利名称:一种高并发Web医学影像服务器的实现方法
技术领域:
本发明提供一种高并发Web医学影像服务器的实现方法。
背景技术:
Web服务器也称为WWW (WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。Wffff是hternet的多媒体信息查询工具,是hternet上近年才发展起来的服务, 也是发展最快和目前用的最广泛的服务。正是因为有了 WWW工具,才使得近年来hternet 迅速发展,且用户数量飞速增长。WWW是World Wide W^eb (环球信息网)的缩写,也可以简称为W^eb,中文名字为“万 维网”。通过万维网,人们只要通过使用简单的方法,就可以很迅速方便地取得丰富的信息 资料。由于用户在通过Web浏览器访问信息资源的过程中,无需再关心一些技术性的细节, 而且界面非常友好,因而Web在hternet上一推出就受到了热烈的欢迎,走红全球,并迅速 得到了爆炸性的发展。Web服务器可以解析(handles)HTTP协议。当Web服务器接收到一个HTTP请 求(request),会返回一个HTTP响应(response),例如送回一个HTML页面。为了处理一 个请求(request),Web服务器可以响应(response) —个静态页面或图片,进行页面跳转 (redirect),或者把动态响应(dynamic response)的产生委托(delegate)给一些其它的 程序。无论它们的目的如何,这些服务器端(server-side)的程序通常产生一个HTML的响 应(response)来让浏览器可以浏览。Web服务器的性能就是指一个Web服务器响应用户请求的能力,服务器的性能对 于一个Web系统来说至关重要。如何在有限的服务器资源下尽可能的支持更多的用户并发 请求?为了达到这个目的我们需要实现一个高效的模型。让太少或者太多的服务器线程 来处理客户的请求,都可能导致性能问题。例如,如果一个服务器创建单个线程来处理所有 的请求,那么客户端可能长期等待而得不到响应,因为服务器同一时刻只能忙于处理一个 请求。当然单个线程也能并发处理多个请求,当1/0操作被启动时,它可以从一个请求切换 到另一个请求,但是这种结构相当复杂,并且不能充分利用多处理器的优势。在另一个极 端,服务器可以创建一个大规模的线程池,这样几乎每一个客户请求都可以由一个专门的 线程来处理。这种情形通常会导致线程频繁切换大量线程被唤醒,执行CPU处理,阻塞等 待1/0,然后在请求完成之后又一次阻塞以等待新的请求。如果没有别的情况,太多的线程 将导致过多的上下文切换,因为调度程序不得不将处理器时间在多个活动线程之间分割。
发明内容
本发明提供一种高并发Web医学影像服务器的实现方法,其使线程避免不必要的 阻塞,尽量减少上下文切换。同时,还要使用多线程来发挥最大限度的并行。理想的情况是在每一个处理器上运行一个线程来处理一个客户请求,当处理器上的活动线程完成一个请 求时,如果还有其他的请求正在等待,则不阻塞。为了使这一优化处理可以有效的进行,应 用程序必须有一种可行的方法,使得一个正在处理客户请求的线程在I/O上阻塞时另外一 个等待线程被激活。本发明为解决上述技术问题所采用的技术方案为一种高并发Web医学影像服务器的实现方法,其包括Web服务进程、数据交换区、 处理任务进程和管理进程,所述管理进程来对资源进行分配,所述处理任务进程定义三个 数据结构,分别记录管理进程属性信息、进程选择属性信息及处理子进程的数据交换信息, 同时定义进程的状态,运行时其包括以下步骤A.启动管理进程时创建一个共享内存区,将内存区影射到进程地址中;B.处理任务进程将三个数据结构影射到共享内存中区;C.管理进程将进程消息句柄记录在属性信息中,启动处理任务进程,返回进程ID 号,找出处理任务进程信息列表中未记录进程信息的位置,将内容写入该位置,同时将进程 设置为正在启动中,还不能接收任务处理;D.处理任务进程启动后打开管理进程创建的共享内存区,将共享内存区影射到该 进程地址中,获取该进程ID找出列表中记录该进程的位置,将进程状态修改为已经启动成 功,可以执行任务,同时通知管理主进程可以为该进程分配任务;E.管理进程进入等待任务求请状态,实时检测管道进程属性信息表变量属性值, 当Web服务接收到一个任务请求时,首先判断处理任务进程属性信息结构,该线程是否已 经分配了处理资源,如果已经分配了资源,直接向处理任务进程发出处理请求,如果未分配 资源,向管理进程发出请求,管理进程为该线程分配资源,指定处理任务进程属性信息具体 的位置,同时通知进程进入执行状态,如果所有的进程都处于处理状态,管理进程直接启动 一个进程来执行任务;F.处理进程接收到处理任务,从处理子进程属性信息表中读取数据,进行处理,处 理结束后向任务线程返回处理结果,结束任务。所述处理任务进程设置了一个初始默认启动进程数,如果进程小于指定数量,管 理进程会启动新的任务进程来补充处理任务。其还包括网络通信进程,所述网络通信进程有两个数据结构,分别记录管理进程 的属性信息、进程运行状态信息,同时定义进程的状态,网络通信进程启动后的工作步骤 为Al.将两个结构影射到共享内存区中,网络通信进程启动后打开管理进程创建的 共享内存区,将共享内存区影射到该进程地址中,这样网络通信进程就可以访问进程信息 列表中的信息;Bi.获取网络通信进程ID找出列表中记录该进程的位置,将进程状态修改为打 开,同时向管理进程请求分配任务,进程进入等待状态;Cl.网络通信进程接收到管理进程消息后启动完成端口网络监听模式,接收客户 端的处理请求。所述网络通信进程同时启动有三个,其中一个工作,另两个挂起,当工作的进程到 期后,由一个挂起的进程接替网络通信任务,管理进程定时检测网络通信进程,如果进程数
4量少于三个,将自动启动一个新网络通信进程用于等待执行通信任务。
图1为本发明实施例操作序列图;图2为独立通信进程模式示意图;图3为独立进程处理模式示意图;图4为本发明实施例多进程并发处理方案示意图;;图5为本发明实施例进程通信信息结构示意图;图6为本发明实施例管理进程执行过程示意图;图7为本发明实施例通信进程执行过程示意图;图8为本发明实施例进程通信信息结构示意图;
图9为本发明实施例Web任务线程执行过程示意图;图10为本发明实施例管理进程执行过程示意图;图11为本发明实施例处理进程执行过程示意图;图12为本发明实施例Web影像服务器处理流程具体实施例方式下面根据附图和实施例对本发明作进一步详细说明我们开发了一个Web医学影像服务器,用于解决高并发资源的有效利用。通过该 服务器Web浏览器就可以访问到集群存储服务器上的影像数据,Web服务器具体的任务处 理操作环节首先Web浏览器通过标准HTTP协议向Web服务器发出取图请求。Web服务器接收到求请后,通过TCP/IP协议向影像存储服务器发出连接请求,收 到影像存储服务器的连接确认后读取影像数据,数据读取成功断开连接。图像获取成功后,Web服务器应该根据浏览器传过来的参数进行相应的处理,如调 整图像大小,数据压缩,文件格式传换等。图像处理完毕后将结果返回给Web浏览器。如图1所示.由于Web服务器所有功能都在一个进程的多个线程中实现,当一个任务处理发生 错误的时候有可能会导致整个进程停止工作,这样将导致整个Web服务器当机。I/O完成端口可以较好的解决高并发的访问效率,但并没有解决其系统的稳定性 问题,但对于一台服务器来说,能够长期稳定的工作是非常重要的。除开任务处理环节,影 响系统的稳定性主要是网络通信,由于用户连接、数据传输存在很多不确定因素,有硬件方 面的也有软件方面的。为了解决系统的稳定性问题,我们将Web服务器的网络通信环节独 立出来,同时设定一个进程生存期,也就是说由一个进程专门负责网络通信过程,当进程生 存期到将关闭该进程,同时由另一个进程接替网络通信任务。如图2所示.由于进程启动需要花费较多的时间,考虑到效率问题所以服务器运行的时候系统 将预先启动三个网络通信进程,其中一个负责执行网络通信任务,其它两个进程挂起等待 执行。当执行进程的生存期到,执行进程将关闭监听任务,同时等待该进程未处理完成的请 求,待所有的通信任务都处理完成后关闭进程。当执行进程关闭监听任务的时候将由其中一个挂起进程接替监听网络处理任务,进入执行状态。由于已经关闭了一个进程,同时一个 挂起进程已经切换到执行状态,所以挂起进程减少了一个,运行环境发生了变化,这个时候 系统将自动补充一个新的挂起进程来等待下一步的操作。使用这种方法可以有效的避免进 程长时候运行后产生的随机错误。Web服务器除了网络通信内容外还有就是实现如何处理用户的任务,为了保证 Web影像服务器能够持续稳定工作,我们把所有的处理任务量化成数据的输入、处理、输出 三个环节。任务请求数据的输入和处理结果数据的输出只涉及到数据内容的拷贝,环节简 单不可能出现什么问题。问题主要出现在任务处理过程,由于影像处理的请求任务比普通 的文字处理请求要复杂多变,处理过程可能出现的问题很难全部控制,所以将该环节独立 到服务程序之外来考虑,这样就不会影响服务程序的稳定性。如何能将处理环节独立到服务程序之外呢?我们使用了一种方法将每一个处理 任务独立成一个个进程,将并发处理的每一个线程任务对应一个进程,由每一个进程来处 理该线程需要完成的任务,当发生一个处理任务时线程将输入数据提交给该进程,由进程 处理任务,线程等待进程处理,进程处理结束将结果传给线程,线程返回请求结果。任务线 程与处理进程通道的搭建由一个管理进程来负责,管理进程同时实现处理进程分配策略。 当处理进程发生错误无法完成处理任务,线程结束等待返回错误信息,管理进程将该处理 进程关闭,重新启动一个新的进程代替原进程。使用这种方法可以将处理环节独立于服务 程序之外,避免系统处理错误导致崩溃的可能性。如图3所示。根据上述说明,我们可以知道该方法的实现主要是分成三部分,分别是Web服 务进程(Web Server Process)、数据交换区(Shared Memory)、处理任务进程(Task Process)。但是这三部分如何联系起来以及如何避免线程相互抢夺资源呢?为了将这三部 分有效的组织起来,还需要再引入一个管理进程(Manage Process),由管理进程来对资源 进行有效的分配,如图4所示因为系统在运行的时候会为每个进程分配不同的内存区域,对不同进程来说,它 们具有独立的数据空间,要进行数据传递需要分配一个共享内存区(Shared Memory)。首先 在启动主管理进程的时候可以通过系统函数CreateFileMapping创建一个共享内存区,通 过MapViewOfFiIe将内存区影射到进程地址中。在系统运行过程中,管理进程需要管理两 种类型的进程,一种为网络通信进程,别一种为数据处理任务进程。因为两种进程的调度策 略完全不同,所以在实际操作中,应该分别进行考虑。首先我们先描述网络通信进程调度策略为了实现主管理进程对其进行合理调 度,应该定义两个数据结构,分别记录管理主进程的属性信息、进程运行状态信息,同时定 义进程的状态,将两个结构影射到共享内存中进程状态定义表
LProcState进程状态状态描述psOpen进程已打开psClose进程已关闭pslnit进程正在初始化中,还不能使用psSuspend进程已经挂起psExecute进程正在执行任务,无法接收其他任务
进程当前状态 进程句柄
网络通信子进程属性信息
struct LIOCPChiIdInfo
{
LIOCPProcState State HANDLE ProcessHandle int ProcessId -J/ 进程编号 HWND Handle ;//进程接收消息对象句柄 DATE OpenTime ;//进程打开时间 DATE ExecuteTime ;//进程监听时间 DATE SuspendTime ;//进程最后一次挂起时间
};
网络通信管理主进程属性信息结构
struct LParentProcInfo
{
HWND Handle -J/父进程对象句柄 LPipeProcInfo Channel [100] ;//任务进程选择
};
将二个结构影射到共享内存区中,如图5所示.
实现了对进程状态的记录后还需要定义一组用于进程间通信的消息命令。 进程消息定义表
消息命令命令描述WM_PR0CESS_0PEN进程己经打开,向父进程发出通知WM_PR0CESS_CL0SE进程已经关闭,向父进程发出通知WM_PR0CESS—EXECUTE向父进程发出通知,进程已经开始执行操作,需要重 新启动一个新进程进行监听WM_PR0CESS_SUSPEND向父进程发出通知,进程已经挂起WM_PR0CESS_ST0P向子进程发出通知,要求停止处理 对消息定义完成后就可以实现进程的调度工作管理主进程启动后将进程消息句
7柄记录在属性信息中。为了避免启动任务进程影响系统的运行效率,在启动管理主进程后 将预先启动三个网络通信进程,使用CreateProcess启动进程,函数调用结束后返回进程 ID号,找出子进程信息列表中未记录进程信息的位置,将内容写入该位置,同时将进程设置 为pslnit状态表示该任务进程正在启动中,还不能进行网络通信。通信进程启动后通过系统函数OpenFi 1 eMapping打开管理进程创建的共享内 存区,通过MapViewOfFile将内存区影射到该进程地址中,这样通信进程就可以访问进 程信息列表中的信息。使用GetCurrendProcessId获取该进程ID找出列表中记录该进 程的位置,将进程状态修改为psOpen,说明进程已经启动成功,可以执行任务。同时使用 PostMessage向管理主进程发出WM_PR0CESS_0PEN消息,通知管理主进程可以为该进程分 配任务,进程进入等待状态。管理进程接收到WM_PR0CESS_0PEN消息后选择其中一个进程作为执行进程,向该 进程发送 WM_PROCESS_EXECUTE 消息。通信进程接收到WM_PR0CESS_EXE⑶TE消息后启动完成端口网络监听模式,接收 客户端的处理请求。当通信进程进入执行状态后生存期将开始计时,进程运行一段时间,到 达生存期后当前执行的通信进程将向管理进程发出WM_PROCESS_SUSPEND消息,同时关闭 完成端口网络监听,进程状态修改成psSupsend状态。网络监听虽然关闭,但该进程有可能 还存在关闭监听端口前用户未处理完成的连接,所以进程不马上关闭,而是等待所有用户 处理完成后再关闭进程。管理进程接收到通信进程的WM_PROCESS_SUSPEND消息后需要马上选择一个挂起 的通信进程发送WM_PR0CESS_EXE⑶TE消息启动执行状态,接替网络通信任务。管理进程定时检测通信进程数量,如果进程数量少于三个,将自动启动一个新进 程用与等待执行通信任务。如图6和7所示。以上为通信进程的调度策略,使用该方法可以保正网络通信的持续稳定工作,不 会因运行时间长导致运行问题。描述了通信进程的调度策略后,我们再描述处理进程的调度策略同样我们为处理进程也定义三个数据结构,分别记录管理主进程属性信息、进程 选择属性信息及处理子进程的数据交换信息,同时定义进程的状态,将三个结构影射到共 享内存中,这样进程间就可以知道各自的状态,以便如何进行下一步的操作。进程状态定义表
权利要求
1.一种高并发Web医学影像服务器的实现方法,其特征在于,其包括Web服务进程、数 据交换区、处理任务进程和管理进程,所述管理进程来对资源进行分配,所述处理任务进程 定义三个数据结构,分别记录管理进程属性信息、进程选择属性信息及处理子进程的数据 交换信息,同时定义进程的状态,运行时其包括以下步骤A.启动管理进程时创建一个共享内存区,将内存区影射到进程地址中;B.处理任务进程将三个数据结构影射到共享内存中区;C.管理进程将进程消息句柄记录在属性信息中,启动处理任务进程,返回进程ID号, 找出处理任务进程信息列表中未记录进程信息的位置,将内容写入该位置,同时将进程设 置为正在启动中,还不能接收任务处理;D.处理任务进程启动后打开管理进程创建的共享内存区,将共享内存区影射到该进程 地址中,获取该进程ID找出列表中记录该进程的位置,将进程状态修改为已经启动成功, 可以执行任务,同时通知管理主进程可以为该进程分配任务;E.管理进程进入等待任务求请状态,实时检测管道进程属性信息表变量属性值,当 Web服务接收到一个任务请求时,首先判断处理任务进程属性信息结构,该线程是否已经 分配了处理资源,如果已经分配了资源,直接向处理任务进程发出处理请求,如果未分配资 源,向管理进程发出请求,管理进程为该线程分配资源,指定处理任务进程属性信息具体的 位置,同时通知进程进入执行状态,如果所有的进程都处于处理状态,管理进程直接启动一 个进程来执行任务;F.处理进程接收到处理任务,从处理子进程属性信息表中读取数据,进行处理,处理结 束后向任务线程返回处理结果,结束任务。
2.根据权利要求1所述的一种高并发Web医学影像服务器的实现方法,其特征还在于 所述处理任务进程设置了一个初始默认启动进程数,如果进程小于指定数量,管理进程会 启动新的任务进程来补充处理任务。
3.根据权利要求1所述的一种高并发Web医学影像服务器的实现方法,其特征还在于 其还包括网络通信进程,所述网络通信进程有两个数据结构,分别记录管理进程的属性信 息、进程运行状态信息,同时定义进程的状态,网络通信进程启动后的工作步骤为Al.将两个结构影射到共享内存区中,网络通信进程启动后打开管理进程创建的共享 内存区,将共享内存区影射到该进程地址中,这样网络通信进程就可以访问进程信息列表 中的信息;Bi.获取网络通信进程ID找出列表中记录该进程的位置,将进程状态修改为打开,同 时向管理进程请求分配任务,进程进入等待状态;Cl.网络通信进程接收到管理进程消息后启动完成端口网络监听模式,接收客户端的 处理请求。
4.根据权利要求3所述的一种高并发Web医学影像服务器的实现方法,其特征还在于 所述网络通信进程同时启动有三个,其中一个工作,另两个挂起,当工作的进程到期后,由 一个挂起的进程接替网络通信任务,管理进程定时检测网络通信进程,如果进程数量少于 三个,将自动启动一个新网络通信进程用于等待执行通信任务。
全文摘要
本发明提供一种高并发Web医学影像服务器的实现方法,其包括Web服务进程、数据交换区、处理任务进程和管理进程,所述管理进程来对资源进行分配,所述处理任务进程定义三个数据结构,分别记录管理进程属性信息、进程选择属性信息及处理子进程的数据交换信息,同时定义进程的状态。本发明使线程避免不必要的阻塞,尽量减少上下文切换。同时,还要使用多线程来发挥最大限度的并行。当处理器上的活动线程完成一个请求时,如果还有其他的请求正在等待,则不阻塞。为了使这一优化处理可以有效的进行,应用程序必须有一种可行的方法,使得一个正在处理客户请求的线程在I/O上阻塞时另外一个等待线程被激活。
文档编号G06F9/46GK102073537SQ201010503389
公开日2011年5月25日 申请日期2010年9月29日 优先权日2010年9月29日
发明者陈闽峰 申请人:深圳市蓝韵实业有限公司