有哪些网站是做数据展示,四川省住房和城乡建设厅网站无法进入,小程序联盟商家版,网站收录没排名文章目录 一、多进程并发服务器使用原理难点特点代码 二、多线程并发服务器使用原理难点特点 总结 一、多进程并发服务器
多进程并发服务器是一种经典的服务器架构#xff0c;它通过创建多个子进程来处理客户端连接#xff0c;从而实现并发处理多个客户端请求的能力。
使用… 文章目录 一、多进程并发服务器使用原理难点特点代码 二、多线程并发服务器使用原理难点特点 总结 一、多进程并发服务器
多进程并发服务器是一种经典的服务器架构它通过创建多个子进程来处理客户端连接从而实现并发处理多个客户端请求的能力。
使用原理
服务端父进程创建主线程负责链接主线程在accept等待客户端连接每来一个客户端进行通信主线程都会通过fork函数创建一个处理线程与该客户端进行读取请求与回复响应。
难点
多进程并发服务器实现难点在于处理僵尸进程我们采用再创建一个普通线程负责回收。 该线程继承自主线程。操作系统在处理进程退出后、发现僵尸进程时向父进程发送SIGCHLED信号通知回收。主线程需要屏蔽该信号如果处理信号会导致accept函数强制中断(EINTR)。普通线程会继承主线程的屏蔽字然后进行捕捉设定而后解除屏蔽非阻塞循环回收。
特点
多进程模型有多个处理单元 为多对多模型。多进程模型中子进程随客户端持续链接成功创建客户端退出则子进程退出。僵尸进程如何回收 但是回收无论是阻塞回收还是非阻塞 都会影响连接。具备并发处理能力的服务器模型可以并发连接并发处理为若干客户端提供服务并发量数量取决于进程数量但频繁创建和销毁进程有庞大的系统开销多进程稳定性强因为每个处理单元是一个进程一个进程异常退出不会影响其他进程
代码
只贴了主函数
/*#!/usr/bin/env c
# -*- coding: utf-8 -*-
# ************************************************************************
# *
# * file:process_server.c
# * author:WJQ
# * date:2024-01-22 18:34
# * version 1.0
# * description: c Script
# * Copyright (c) all right reserved
# *
#*************************************************************************
*/
#include server.hint server_start(void)
{int sockfd, csock;struct sockaddr_in client_addr;pid_t pid;socklen_t addrlen;sockfd net_initializer();printf(process tcp server runing..\n);//设置屏蔽字sigset_t set, oset;sigemptyset(set);sigaddset(set, SIGCHLD);sigprocmask(SIG_SETMASK, set, oset);//回收线程创建pthread_t tid;int err;if ((err pthread_create(tid, NULL, thread_wait, NULL)) 0) {printf(wait thread create error:%s\n, strerror(err));exit(0);}while(SHUTDOWN) {addrlen sizeof(client_addr);if ((csock accept(sockfd, (struct sockaddr *)client_addr, addrlen)) 0) {pid fork();if (pid 0) {first_response(csock, client_addr);//父进程完成连接与首次响应} else if (pid 0) {recv_request(csock);//子进程处理客户端请求} else {perror(accept call failed);exit(0);}}}close(sockfd);printf(server its done\n);return 0;
}二、多线程并发服务器
使用原理
其实跟多进程并发服务器非常类似。。。 但是少了处理僵尸进程问题所以只用一个主线程负责连接就好。因为线程可以设置分离态。
难点
进程中sock可以通过继承的方式给子进程线程就得参数传递。
特点
具备并发处理能力的服务器模型可以并发连接并发处理为若干客户端提供服务。并发量数量取决于线程数量。但频繁创建和销毁线程有庞大的系统开销。稳定性较差线程崩溃可能影响其他线程但是开销小轻量级(线程安全问题) 总结
无论是多进程并发服务器还是多线程并发服务器都有各自的缺点。常见的还是多路IO复用服务器。