多进程并发服务器与多线程并发服务器

文章目录

  • 一、多进程并发服务器
    • 使用原理
    • 难点
    • 特点
    • 代码
  • 二、多线程并发服务器
    • 使用原理
    • 难点
    • 特点
  • 总结


一、多进程并发服务器

多进程并发服务器是一种经典的服务器架构,它通过创建多个子进程来处理客户端连接,从而实现并发处理多个客户端请求的能力。

使用原理

服务端:父进程创建主线程(负责链接),主线程在accept等待客户端连接,每来一个客户端进行通信,主线程都会通过fork函数创建一个处理线程与该客户端进行读取请求与回复响应。

难点

多进程并发服务器实现难点在于处理僵尸进程,我们采用再创建一个普通线程负责回收。
该线程继承自主线程。操作系统在处理进程退出后、发现僵尸进程时,向父进程发送SIGCHLED信号,通知回收。主线程需要屏蔽该信号(如果处理信号,会导致accept函数强制中断(EINTR))。普通线程会继承主线程的屏蔽字,然后进行捕捉设定,而后解除屏蔽,非阻塞循环回收。

特点

  1. 多进程模型有多个处理单元, 为多对多模型。
  2. 多进程模型中,子进程随客户端持续,链接成功创建,客户端退出则子进程退出。
  3. 僵尸进程如何回收 但是回收无论是阻塞回收还是非阻塞, 都会影响连接。
  4. 具备并发处理能力的服务器模型,可以并发连接并发处理,为若干客户端提供服务
  5. 并发量数量取决于进程数量
  6. 但频繁创建和销毁进程有庞大的系统开销
  7. 多进程稳定性强,因为每个处理单元是一个进程,一个进程异常退出不会影响其他进程

代码

只贴了主函数

/*#!/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.h>int 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可以通过继承的方式给子进程,线程就得参数传递。

特点

  1. 具备并发处理能力的服务器模型,可以并发连接并发处理,为若干客户端提供服务。
  2. 并发量数量取决于线程数量。
  3. 但频繁创建和销毁线程有庞大的系统开销。
  4. 稳定性较差,线程崩溃可能影响其他线程,但是开销小轻量级(线程安全问题)

总结

无论是多进程并发服务器还是多线程并发服务器,都有各自的缺点。常见的还是多路IO复用服务器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/649676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React16源码: React中commitAllHostEffects内部的commitWork的源码实现

commitWork 1 &#xff09;概述 在 react commit 阶段的 commitRoot 第二个while循环中调用了 commitAllHostEffects&#xff0c;这个函数不仅仅处理了新增节点&#xff0c;若一个节点已经存在&#xff0c;当它有新的内容要更新或者是它的attributes要更新这个时候&#xff0c…

向量数据库知识积累

前言 前文4篇文章主要介绍了MySQL与Redis相关知识&#xff0c;可能某些同学看来略显枯燥。本文基于最近大热的aigc&#xff0c;介绍其中的核心工具&#xff0c;内部数据存储&#xff1a;向量数据库。本人在最近的项目中也是初次使用了向量数据库&#xff0c;对其中的向量处理、…

臻于至善,CodeArts Snap 二维绘图来一套不?

前言 我在体验 华为云的 CodeArts Snap 时&#xff0c;第一个例子就是绘制三角函数图像&#xff0c;功能注释写的也很简单。 业务场景中&#xff0c;有一类就是需要产出各种二维图形的&#xff0c;比如&#xff0c;折线图、散点图、柱状图等。 为了提前积累业务素材&#xf…

Docker数据卷挂载(以容器化Mysql为例)

数据卷 数据卷是一个虚拟目录&#xff0c;是容器内目录与****之间映射的桥梁 在执行docker run命令时&#xff0c;使用**-v 本地目录&#xff1a;容器目录**可以完成本地目录挂载 eg.Mysql容器的数据挂载 1.在根目录root下创建目录mysql及三个子目录&#xff1a; cd ~ pwd m…

GitBook可以搭建知识库吗?有无其他更好更方便的?

在一个现代化的企业中&#xff0c;知识是一项宝贵的资产。拥有一个完善的企业知识库&#xff0c;不仅可以加速员工的学习和成长&#xff0c;还能提高工作效率和团队协作能力。然而&#xff0c;随着企业不断发展和扩大规模&#xff0c;知识库的构建和管理变得更加复杂和耗时。 |…

mysql的联合索引利用情况

目录 查询条件对应的列值的类型与列对应的类型不一致 只有一个联合索引且包含非主键外全部列 查询条件全部为等值查询 查询条件有范围查询 有联合索引未包含全部列 在使用 mysql 进行数据存储时&#xff0c;经常用到联合索引&#xff0c;但是使用联合索引有一些注意点&…

git checkout和git switch的区别

git checkout 和 git switch 是 Git 中用于切换分支的命令&#xff0c;但它们在某些方面有一些区别。需要注意的是&#xff0c;git switch 是在 Git 2.23 版本引入的&#xff0c;它提供了一种更直观的分支切换方式。 git checkout&#xff1a; 分支切换&#xff1a; 在 Git 2.…

初学数据结构:Java对象的比较

目录 1. PriorityQueue中插入对象2. 元素的比较2.1 基本类型的比较2.2 对象比较的问题 3. 对象的比较3.1 基于Comparable接口类的比较3.2 基于比较器比较3.3 三种方式对比 4. 集合框架中PriorityQueue的比较方式5. 使用PriorityQueue创建大小堆&#xff0c;解决TOPK问题 【本节…

PyTorch 中的nn.Conv2d 类

nn.Conv2d 是 PyTorch 中的一个类&#xff0c;代表二维卷积层&#xff08;2D Convolution Layer&#xff09;。这个类广泛用于构建卷积神经网络&#xff08;CNN&#xff09;&#xff0c;特别是在处理图像数据时。 基本概念 卷积: 在神经网络的上下文中&#xff0c;卷积是一种特…

llamaindex 集成本地大模型

从​​​​​​​​​​​​​​用llamaindex 部署本地大模型 - 知乎Customizing LLMs within LlamaIndex Abstractions 目的&#xff1a;llamaindex 是一个很好的应用框架&#xff0c;基于此搭建一个RAG应用是一个不错的选择&#xff0c;但是由于llamaindex默认设置是openai的…

FlashInternImage实战:使用FlashInternImage实现图像分类任务(一)

文章目录 摘要安装包安装timm 数据增强Cutout和MixupEMA项目结构编译安装DCNv4环境安装过程配置CUDAHOME解决权限不够的问题 按装ninja编译DCNv4 计算mean和std生成数据集 摘要 https://arxiv.org/pdf/2401.06197.pdf 论文介绍了Deformable Convolution v4&#xff08;DCNv4&…

【MQ02】基础简单消息队列应用

基础简单消息队列应用 在上一课中&#xff0c;我们已经学习到了什么是消息队列&#xff0c;有哪些消息队列&#xff0c;以及我们会用到哪个消息队列。今天&#xff0c;就直接进入主题&#xff0c;学习第一种&#xff0c;最简单&#xff0c;但也是最常用&#xff0c;最好用的消息…

百度百科词条编辑规则是什么?

百度百科词条编辑规则是指在百度百科平台上编辑和创建词条时需要遵循的一系列标准和指南。百度百科作为全球最大的中文百科全书&#xff0c;旨在为用户提供准确、全面、客观的知识信息。为了确保词条内容的质量&#xff0c;百度设定了严格的编辑规则。伯乐网络传媒来给大家分享…

用navigator.sendBeacon完成网页埋点异步请求记录用户行为,当网页关闭的时候,依然后完美完成接口请求,不会因为浏览器关闭了被中断请求。

代码用例 <template><div :class"$options.name"><el-button type"primary" click"sendBeacon">navigator.sendBeacon 请求埋点接口 发送json对象数据</el-button></div> </template><script> expor…

java web 职位推荐系系统Myeclipse开发mysql数据库协同过滤算法java编程计算机网页项目

一、源码特点 java Web职位推荐系统是一套完善的java web信息管理系统 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0…

【小白教程】幻兽帕鲁服务器一键搭建 | 支持更新 | 自定义配置

幻兽帕鲁刚上线就百万在线人数&#xff0c;官方服务器的又经常不稳定&#xff0c;所以这里给大家带来最快捷的搭建教程&#xff0c;废话不多说直接开始。 步骤一&#xff1a;准备服务器 服务器建议 Linux 系统&#xff0c;资源占用低&#xff0c;而且一键脚本只需要一条命令&am…

安卓程序开发——搭建主页框架

一、实验目的 搭建项目框架掌握Android Activity组件使用和Intent机制&#xff0c;加强对Activity生命周期的理解&#xff0c;掌握Fragment的使用。 二、实验设备及器件 Android Studio 三、实验内容 1.创建一个Android应用&#xff0c;设置工程名MobileShop&#xff0c;包…

react的高阶函数HOC:

React 的高阶组件&#xff08;Higher-Order Component&#xff0c;HOC&#xff09;是一种用于复用组件逻辑的模式。它是一个函数&#xff0c;接收一个组件作为参数&#xff0c;并返回一个新的增强过的组件。 HOC 可以用于实现以下功能&#xff1a; 代码复用&#xff1a;通过将…

Android主流框架汇总

Android主流框架汇总 Android 百大框架 Android 常用开发框架 Android MVP 快速开发框架 Android 开源框架【集合】 AndroidFire 新闻阅读App框架 RxPermissions——Android 申请运行时权限 RxPermissions——Android 动态权限申请库 SuperTextView——绘制控件UI XPopup——An…

linux系统nginx工具接口压力测试工具和关联php页面

接口压力测试工具和nginx关联php ab接口压力测试工具工具下载与使用参数选项内容解释ab性能指标吞吐率&#xff08;Requests per second&#xff09;并发连接数&#xff08;The number of concurrent connections&#xff09;并发用户数&#xff08;Concurrency Level&#xff…