Socket多进程模型

基于最原始的阻塞网络 I/O, 如果服务器要支持多个客户端,其中比较传统的方式,就是使用多进程模型,也就是为每个客户端分配一个进程来处理请求。

服务器的主进程负责监听客户的连接,一旦与客户端连接完成,accept() 函数就会返回一个「已连接 Socket」,这时就通过 fork() 函数创建一个子进程,实际上就把父进程所有相关的东西都复制一份,包括文件描述符、内存地址空间、程序计数器、执行的代码等。

这两个进程刚复制完的时候,几乎一模一样。不过,会根据返回值来区分是父进程还是子进程,如果返回值是 0,则是子进程;如果返回值是其他的整数,就是父进程。

正因为子进程会复制父进程的文件描述符,于是就可以直接使用「已连接 Socket 」和客户端通信了,

可以发现,子进程不需要关心「监听 Socket」,只需要关心「已连接 Socket」;父进程则相反,将客户服务交给子进程来处理,因此父进程不需要关心「已连接 Socket」,只需要关心「监听 Socket」。

下面这张图描述了从连接请求到连接建立,父进程创建生子进程为客户服务。

 

另外,当「子进程」退出时,实际上内核里还会保留该进程的一些信息,也是会占用内存的,如果不做好“回收”工作,就会变成僵尸进程,随着僵尸进程越多,会慢慢耗尽我们的系统资源。

因此,父进程要“善后”好自己的孩子,怎么善后呢?那么有两种方式可以在子进程退出后回收资源,分别是调用 wait() 和 waitpid() 函数。

这种用多个进程来应付多个客户端的方式,在应对 100 个客户端还是可行的,但是当客户端数量高达一万时,肯定扛不住的,因为每产生一个进程,必会占据一定的系统资源,而且进程间上下文切换的“包袱”是很重的,性能会大打折扣。

进程的上下文切换不仅包含了虚拟内存、栈、全局变量等用户空间的资源,还包括了内核堆栈、寄存器等内核空间的资源

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

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

相关文章

【jetson笔记】解决vscode远程调试qt.qpa.xcb: could not connect to display报错

配置x11转发 jetson远程安装x11转发 安装Xming Xming下载 安装完成后打开安装目录C:\Program Files (x86)\Xming 用记事本打开X0.hosts文件,添加jetson IP地址 后续IP改变需要重新修改配置文件 localhost 192.168.107.57打开Xlaunch Win菜单搜索Xlaundch打开 一…

上市公司-避税程度(2000-2022年)(数据+4种方法测算)

上市公司的避税程度是一个重要的财务指标,可以通过多种方式进行研究和分析。以下是一些可以用来研究上市公司避税程度的方法和指标:财务报表分析:可以通过分析公司的财务报表,特别是利润表和资产负债表,来识别潜在的避…

【裁员潮】技术变革下的职业危机,程序员会有多大影响,又应该如何面对

大家好,我是全栈小5,欢迎阅读文章! 此篇是【话题达人】序列文章,这一次的话题是《技术变革下的裁员潮》 文章将以博主的角度进行讲述,理解和水平有限,不足之处,望指正。 目录 背景硬实力职业危机…

Nas-FPN(CVPR 2019)原理与代码解析

paper:NAS-FPN: Learning Scalable Feature Pyramid Architecture for Object Detection third-party implementation:https://github.com/open-mmlab/mmdetection/tree/main/configs/nas_fpn 本文的创新点 本文采用神经网络结构搜索(Neur…

【JavaWeb】日程管理系统 项目搭建 第二期

文章目录 一、数据库准备二、导入依赖 与 JDBC工具类三、pojo包处理四、daodao包工具类 五、service六、controllerservlet 基类 反射 七、加密工具类 MD5八、页面文件九、业务代码9.1 注册业务处理9.2 登录业务处理 总结 一、数据库准备 创建数据库: SET NAMES …

【码农新闻】浏览器上有趣的 Console 命令,VSCode 插件 FreeWindow......

目录 【码农新闻】浏览器上有趣的 Console 命令,VSCode 插件 FreeWindow...... 浏览器上有趣的 Console 命令VSCode 插件 FreeWindow拖拽竟然还能这样玩!阮一峰 ES6 教程总结学习网站总结与整理买临期食品的年轻人,在向“吃喝内卷”低头文章所属专区 码农新闻 欢迎各位编程大…

​第20课 在Android Native开发中加入新的C++类

​这节课我们开始利用ffmpeg和opencv在Android环境下来实现一个rtmp播放器,与第2课在PC端实现播放器的思路类似,只不过在处理音视频显示和播放的细节略有不同。 1.压缩备份上节课工程文件夹并修改工程文件夹为demo20,将demo20导入到Eclipse或…

80.网游逆向分析与插件开发-背包的获取-自动化助手显示物品数据

内容参考于:易道云信息技术研究院VIP课 上一个内容:升级Notice类获得背包基址-CSDN博客 码云地址(ui显示角色数据 分支):https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号:3be017de38c50653b1…

智能泊车,再上热搜

编者按:相比于行车,低速可控场景,更有利于泊车功能快速迭代。同时,对于部分消费者来说,泊车智能化也是加分项。 智能泊车赛道,正在重新成为各路势力争夺的焦点。而上一次“高潮”,要追溯到2018年…

CSC5613C

CSC5613C是一款DC/DC同步降压IC,输入电压8V-30V,CSC5613C具有良好的瞬态响应和环路稳定性。CSC5613C外围元器件极少具有项目过流保护,过热保护功能。CSC5613C可通过调节FB电阻的比例来调节输出电压,可用于快充。CSC561…

OpenCV-Python(49):图像去噪

目标 学习使用非局部平均值去噪算法去除图像中的噪音学习函数cv2.fastNlMeansDenoising()、cv2.fastNlMeansDenoisingColored等 原理 在前面的章节中我们已经学习了很多图像平滑技术,比如高斯平滑、中值平滑等。当噪声比较小时,这些技术的效果都是很好…

k-Wave仿真例程:对圆形换能器记录的光声波场进行时间反转重建

使用 k-Wave 对圆形换能器阵列上记录的二维光声波场进行时间反转重建。 1. 模拟换能器数据 使用 kspaceFirstOrder2D 和外部图像模拟换能器数据以获取初始压力分布,图像代表脉管系统。 定义一个居中的圆形换能器 sensor,在 270 角度上放置 70 个阵元 sensor_radius = 4.5…