您的位置:首页 > 其它

4.1.2.2 MASTER_PROC结构体

2016-04-07 10:26 316 查看
/master/master.h
typedef struct MASTER_PROC {
MASTER_PID pid;                       /*child process id */
unsigned gen;                    /*child generation number */
int     avail;                    /* availability */
MASTER_SERV *serv;                         /*parent linkage */
int     use_count;                            /* number of servicerequests */
} MASTER_PROC;


pid:子进程id。

gen:子进程计数,执行master_spawn时递增。

avail:表示该子进程是否可用,为0或1:

#define MASTER_STAT_TAKEN 0 /*this one is occupied */
#define MASTER_STAT_AVAIL 1 /*this process is idle */

子进程是否可用的意思是子进程是否可以接收下一个请求,可接收则状态为MASTER_STAT_AVAIL,否则为MASTER_STAT_TAKEN。子进程的avail或taken是以“服务一个请求”为单位的:

/master/single_server.c
278    if (master_notify(var_pid, single_server_generation, MASTER_STAT_TAKEN)< 0)
279         /* void */ ;
280    if (single_server_in_flow_delay && mail_flow_get(1) < 0)
281        doze(var_in_flow_delay * 1000000);
282    single_server_service(stream, single_server_name, single_server_argv);
283    (void) vstream_fclose(stream);
284    if (master_notify(var_pid, single_server_generation, MASTER_STAT_AVAIL)< 0)


当要开始为一个请求服务了,调用278行的master_notify通过管道通知父进程子进程状态为MASTER_STAT_TAKEN。

282行为请求提供服务。

284行服务完成后,通知父进程子进程完成了这次服务,将子进程状态置为MASTER_STAT_AVAIL。

serv:父进程链接。

use_count:已完成服务数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: