服务器端线程模型 :: Sharing

来源: BlogBus 原始链接: http://www.blogbus.com:80/blogbus/blog/diary.php?diaryid=456735 存档链接: https://web.archive.org/web/20041210125502id_/http://www.blogbus.com:80/blogbus/blog/diary.php?diaryid=456735


Sharing <<<多种持续集成工具全面比较 | 首页 | 长沙丧葬风俗旁听>>> 2004-10-23 服务器端线程模型 当前各种流行的分布计算技术,比如CORBA/CCM、RMI/EJB、COM/DCOM或SOAP/Web Services,服务器端的性能是至关重要的特性之一;同时,在使用这些分布计算技术组成的C/S方式服务器端的线程模型对性能的影响相当大。 一般说来,对于一般的服务器端来说,其线程可以分为三种: 1、IO线程。这种线程负责处理服务器端的网络通讯IO,比如网络连接的建立,以及网络报文的交换等。我们称这类线程为“Acceptor Thread”。如果没有足够数目的“Acceptor Thread”进行服务,后来的客户端必须等待空闲的“Acceptor Thread”服务,这样大大降低了服务器的响应能力。一个替代的策略是使用异步IO,典型的异步API是select。select有个潜在的缺陷,那就是在windows平台上,select作为参数的文件描述符的个数只有64个(在select的头文件中定义成了大小为64的数组,只能通过修改头文件并重新编译来突破这个限制,在linux/unix平台上,这个限制是1024。实际上还要去掉进程已经打开的文件描述符,比如标准输入/标准输出/标准错误),也就是说,select能够同时处理的异步事件只有64个。 2、Unmarshal线程。Unmarshal线程用于对客户端的请求进行解码。一般也称为“Receive Thread”。如果没有足够的Unmarshal线程进行服务,同一个Socket连接在前面的请求没有解码完成之前,后面的请求只能够等待。 3、Dispatch线程。Dispatch线程运行业务逻辑,在CORBA中即Servant,在EJB中是Bean Implementation。 在某些服务器的实现中,这三种线程不一定完全独立存在。比如,有的实现中,将Unmarshal和Dispatch线程合并为一种,这样会导致服务器响应能力的下降。 如果对这三类线程进行组合,可以得到多种线程策略,比如每请求一线程、每客户一线程或使用最流行的线程池策略。这每一种线程模型,又都可以单独使用在以上三类线程中,比如,可以分别对以上的每种线程使用线程池策略。 多线程能够显著提高服务器的响应能力,但实际上,对比单线程的服务器,单线程服务器的效率是最高的,这种模式不存在多线程之间的同步竞争开销。 服务器端采取何种设计,是否需要全部实现上述三种线程,以及对应的各种策略,和最终需求密切相关。期望能够出现一种通用的服务器端线程框架,它能够实现可配置的多种线程以及线程策略的组合(进一步的,可以支持优先级,变成实时多线程框架)。 mep 发表于 2004-10-23 15:46 引用Trackback(0) | 编辑 评论 小弟这里还有些问题向您请教: 1。对于corba多线程服务器,其资源回收应注意哪些问题,我采用MICO进行开发,服务器端我尽量采用_var类型的变量防止内存泄露,但好象还是有,呵呵:) 2。如何才能做到corba服务器graceful exit,我采用的方式是在其他的线程深拷贝orb_var,然后触发shutdown,是可退出orb-〉run阻塞线程,但出现内存泄露,有其他更好的方式吗? 非常感谢 frenchen ( ) 发表于 2004-11-30 15:13 发表评论 最后更新 微软的Domain-Specific Language 长沙丧葬风俗旁听 服务器端线程模型 多种持续集成工具全面比较 Outlook & Blog 贝克汉姆毁掉足球? Gnome2.8 Released 安装X.org 6.8续 安装X.org 6.8 清朝的后宫 mep Homepage