linux 高并发,linux高并发服务器开发
多进程高并发设计框架建议根据cpu核心数设置子进程数。建议将相应的进程绑定到cpu。(cpu关联性)
优势:
充分利用多核系统的并发处理能力。(多个进程运行在多个不同的内核上)负载平衡。职责明确,管理流程只负责管理,工作流程负责处理业务逻辑。示例:
multip_process.c
#定义_ GNU _源
#包含sched.h
#包含stdio.h
#包含stdlib.h
#包括unistd.h
#包含stdint.h
//函数指针返回值xx参数
typedef void(* spawn _ proc _ pt)(void * data);//接收void*类型参数的函数指针
静态void worker _ process _ cycle(void * data);
静态void start _ worker _ processes(int n);
PID _ t spawn _ process(spawn _ proc _ pt proc,void *data,char * name);
int main(int argc,char **argv){
//调用以启动工作进程-4
start _ worker _ processes(4);
//管理子进程
等待(空);
}
//推动者进程
void start _ worker _ processes(int n){
int I=0;
for(I=n-1;我我- ){
//第一个参数是工作进程的处理周期。
spawn _ process(worker _ process _ cycle,(void *)(intptr_t) i, worker process );
}
}
//创建子进程
PID _ t spawn _ process(spawn _ proc _ pt proc,void *data,char *name){
pid _ t pid
PID=fork();//创建子进程
开关(pid){
案例1:
fprintf(stderr, fork()在生成 %s\n ,name时失败);
return-1;
案例0:
proc(数据);
返回0;
默认值:
打破;
}
printf(start %s %ld\n ,name,(long int)PID);
返回pid
}
//设置cpu关联并将进程绑定到其中一个核心。
静态void worker _ process _ init(int worker){
cpu _ set _ t cpu _ affinity
//多核高并发处理
CPU _ ZERO(CPU _ affinity);
//参数-cpu号-掩码地址
CPU_SET(worker % CPU_SETSIZE,CPU _ affinity);
//sched_setaffinity
if(sched_setaffinity(0,sizeof(cpu_set_t),cpu_affinity)==-1){
fprintf(stderr, sched_setaffinity()失败\ n );
}
}
void worker _ process _ cycle(void * data){
int worker=(intptr_t)数据;
//工作进程初始化
worker_process_init(工人);
//工作
for(;){
睡眠(10);
printf(pid %ld,正在进行.\n ,(long int)getpid());
}
}执行:
补充:
查看cpu内核上进程的命令。ps -eLo ruser、pid、lwp、psr、args
设置CPU亲和度后,可以发现每个子进程对应一个核心。如果不设置,进程和核心之间会有切换,进程会从一个核心切换到另一个核心进行复制拷贝,从而浪费CPU性能,降低执行效率。Typedef函数指针相关文章——关于函数指针和typedef的组合
转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。