服务端编程--进程池的用法(待续)

进程池的工作模式是先fork一定数量的子进程,当进程池中的空闲子进程数超过最大空闲子进程数时,就不fork子进程,因为这时的子进程数已经足够处理客户端的请求服务,只有当空闲子进程小于最大空闲子进程时,且进程池中子进程数小于最大子进程数时,才fork子进程。

主要的数据结构描述

进程池结构体,类似C++中的抽象类

typedef struct tagPOOLSVRSTRU
{
 STR szListenIpAddr[MAX_STR_LEN];  /* 监听服务的IP地址 */
 INT nListenPort[MAX_LISTEN_PORT];  /* 监听服务端口数组 */
 POOLSTARTFUNC funcPoolStart;   /* 子进程构造函数 */
 PVOID pPoolStartArg;   /* 子进程构造函数参数 */
 POOLWORKFUNC funcPoolWork;   /* 子进程工作函数 */
 PVOID pPoolWorkArg;    /* 子进程工作函数参数 */
 POOLENDFUNC funcPoolEnd;   /* 子进程析构函数 */
 PVOID pPoolEndArg;    /* 子进程析构函数参数 */
 POOLFINFUNC funcPoolFinish;   /* 管理进程结束函数 */
 PVOID pPoolFinishArg;   /* 管理进程结束函数参数 */
 INT *pConnectFd[6];    /* 连接服务端口数组 */
 POOLWORKFUNC11 funcPoolWork11;   /* 管理进程工作函数 */
 PVOID pPoolWorkArg11;    /* 管理进程工作函数参数 */
}POOLSVRSTRU;

 

进程池状态描述

typedef struct tagCPQSTRU
{
 INT nTotalProNum;    /* 进程池进程总数 */
 INT nWaitStatProNum;   /* 进程池等待进程数 */
 CPISTRU struCpi[MAX_CHILD_NUM];
}CPQSTRU;

 

进程本身描述

typedef struct tagCPISTRU
{
 INT nSelfProcessId;    /* 自身进程号 */
 INT nChildProcessId;   /* 子进程号 */
 CPSENUM enumCps;
}CPISTRU;

 

进程状态:

typedef enum tagCPSENUM
{
 WAIT=1,     /* 等待状态 */
 WORK=2     /* 工作状态 */
}CPSENUM;

进程池函数指针类型定义

typedef INT (*POOLSTARTFUNC)(PVOID pArgument);
typedef INT (*POOLWORKFUNC)(INT nSockDescriptor,PVOID pArgument);
typedef INT (*POOLENDFUNC)(PVOID pArgument);
typedef INT (*POOLFINFUNC)(PVOID pArgument);
typedef INT (*POOLWORKFUNC11)(INT pSockDescriptor,PVOID pArgument);

定义的常量

#define MAX_LISTEN_PORT 100   /* 系统最多监听端口数 */
#define MIN_CHILD_NUM 6   /* 最小进程数目 */
#define MAX_CHILD_NUM 256   /* 最大进程数目 */
#define MIN_CHILD_IDLE 3   /* 最小空闲进程数目 */
#define MAX_CHILD_IDLE 6   /* 最大空闲进程数目 */
#define INTVAL_SCAN_TIME 5   /* 管理进程扫描间隔时间 */  
#define INTVAL_SCAN_TIME11 100   /* 管理进程扫描间隔时间 */

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值