Chinaunix首页 | 论坛 | 博客
  • 博客访问: 505882
  • 博文数量: 111
  • 博客积分: 3160
  • 博客等级: 中校
  • 技术积分: 1982
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-24 11:49
个人简介

低调、勤奋。

文章分类

全部博文(111)

文章存档

2014年(2)

2013年(26)

2012年(38)

2011年(18)

2010年(27)

分类: LINUX

2012-07-04 07:01:03

Leader/Follow模式

通常情况下,L/F可以用下图进行描述:
通常情况下,对于服务器中的进程采用的都是即时创建的策略,即一旦有一个新的客户端请求立即创建一个新的进程或者线程,而当进程或者线程执行完毕后,进程和线程也随之退出。显然这种策略对于小规模的服务器还能接受,但是如果对于大规模的服务器而言,创建进程或者线程的时间将增加,最终会导致响应时间变长,单位时间内请求处理效率降低。L/F模式则不同,它首先一次性创建多个进程或者线程,包括到系统中,这些进程或者线程担任三种不同的角色:侦听者、工作者以及空闲者,其含义分别如下:
1)、侦听者的角色。该线程负责侦听客户端的请求。在L/F模式中它属于Leader的角色。通常情况下只允许一个进程或者线程担当侦听者的角色。
2)、工作者的角色。当侦听者侦听到客户端的请求之后,它将立即转换为工作者角色并开始处理客户端的请求。工作者角色的线程可以有多个。
3)、空闲者的角色。当工作者执行任务完毕后它并不会立即退出,而是转变它的角色为空闲者,并呆在空闲队列中。空闲者出现的原因是因为客户端请求不够多。空闲者们等待变为侦听者。而当侦听者变为工作者之后,空闲者中的每一个都相互竞争,最终将会有一个线程变为侦听者,其余的继续保持空闲者的状态。
4)、几个极端的情况也是可能出现的:所有线程都变为工作者,忙于处理客户端的请求,没有线程担任侦听者的角色,因此此时客户端的请求都被拒绝;没有工作者,如果没有任何请求到达,那么所有的线程都处于空闲状态。
线程的三个角色的相互转换关系可以用上图的红线进行描述。
阅读(2136) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~