独立开发者系列(25)——大白话进程

news2024/9/23 1:30:56

很多小型的规模场景限制下,复杂概念弊端大于利端。不同模式的实现,是根据具体需求来判定,但是理解底层最基础的原理有助于理解很多工具背后的诞生。比如php的swoole  workerman 要解决的问题。

   首先理解,进程概念,进程(Process)是指正在运行中的程序的实例。当一个程序被加载到内存中并开始执行时,它就成为一个进程。每个进程都有自己的地址空间、内存、数据栈以及其他用于管理运行时所需资源的系统属性。用通俗的我们可视化的角度,就是我们在win里面点开一个exe执行文件,然后可以在任务管理器里面可以看到该任务运行。点开我们win的任务管理器,密密麻麻的,我们看到的都是一个个进程,也就是我们电脑当前运行了这么多进程,只是并不是每个进程我们都在用,很多进程是在背后默默工作的。

 而在Linux的进程同样,可以看到茫茫的进程,从每个pid代表了一个当前正在运行的进程,保持着系统的稳定或者运行了某种功能。而需要说明的,有些程序为了提升软件的运行稳定性,会开多个进程。比如我们最常用的web服务器,nginx.,当前默认情况下,会开四个进程(这个是可以通过配置设定)。但是我们会发现其实它们都是有个主进程的,是1413,

为啥nginx要开这么多进程呢,其实是为了提升nginx自身的性能,还有防止一些异常错误导致服务器的崩溃,而在通常情况下,不同的进程有以下不同的通途:

主进程(Master Process):主进程是 Nginx 的管理者,负责控制其他所有的工作进程。主要任务包括接受来自管理员或者控制台的信号,管理工作进程的生命周期,以及在需要时重新加载配置文件或者重启服务。主进程通常只有一个。

工作进程(Worker Processes):工作进程是实际处理客户端请求的进程。Nginx 通过配置文件中的 worker_processes 指令来指定启动多少个工作进程。每个工作进程是独立运行的,它们并发地处理客户端的请求,可以充分利用多核处理器的性能优势。每个工作进程之间是相互独立的,不共享内存空间,这样可以提高系统的稳定性和安全性。

Cache Loader 进程(Cache Loader Process,可选):当 Nginx 使用了文件缓存(例如代理缓存或者 FastCGI 缓存)时,会有一个专门的 Cache Loader 进程负责预加载缓存文件到内存中,以加速对这些文件的访问。这个进程通常在启动时创建,完成加载后就退出。

事件处理器(Event Handler): Nginx 使用事件驱动模型来处理并发请求,通常会有一个或多个事件处理器进程。这些进程负责监听套接字和处理事件,例如接受客户端连接、读取请求、发送响应等。事件处理器通常与工作进程集成,确保 Nginx 在高并发情况下仍能高效地处理请求。

  看完为了nginx服务,nginx软件不惜开启四个进程保持稳定性/可靠性。我们再来看php的进程运行方式。

  可以看到php的进程也很多。但是主进程只有一个是1412的主进程。

而PHP 进程被 web(我们这里是nginx) 服务器作为 FastCGI 进程管理器(例如 PHP-FPM)管理,而不是直接由用户调用。每个 PHP 进程在处理客户端请求时会被动态创建,处理完请求后可能会被重用,以提高性能和效率。

 也就是在没有php-fpm之前,都是直接cgi模块直接请求php-cgi.exe,这样很快就发现问题,每个用户的请求都要去初始化php,并跑程序代码,于是为了提高请求性能,开发出了php-fpm,专门来管理本来直接cgi到php的链接。于是我们才可以看到php-fpm池子里面这么多程序等待着nginx的请求。

小结: 我们通过日常经验,直观的看到了进程,同时理解了很多软件在设计的时候,通常开辟多进程来保持程序性能和安全的高效性。

这种运行模式稳定运行了很久,从流程上看并没有问题,我们发出一个请求,nginx接收,然后启动php-fpm管理php程序。受制于nginx本身的一些特性,还有php-fpm本身的代码限制,到最后,会发现其实我们可以直接使用一个程序从接收到程序,直接去调度使用php的,这样没有劣质中间商(php-fpm )耗时,必然让我们的请求效率大幅度提升。于是这款底层php的容器叫workerman。

其实到这里php的逻辑已经变了,之前设计的时候,只是写个简单能跑web的脚本,所以就使用自己php-fpm跟web服务器交互的逻辑运行。但是当php的容器改变之后,可以自定义改变端口和实现异步之后,基本一般的IM和简单交互也可以实现。

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

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

相关文章

线程安全(二)synchronized 的底层实现原理、锁升级、对象的内存结构

目录 一、基础使用1.1 不加锁的代码实现1.2 加锁的代码实现二、实现原理2.1 synchronized 简介2.2 对象监控器(Monitor)2.3 加锁过程第一步:判断 Owner 指向第二步:进入 EntryList 阻塞第三步:主动进入 WaitSet 等待三、锁升级3.1 对象的内存结构3.2 Mark Word 对象头3.3 …

实用教程:用 Go 的 net/textproto 包优化文本协议处理

实用教程:用 Go 的 net/textproto 包优化文本协议处理 介绍准备工作环境设置Go 基础回顾 基础使用创建连接发送请求接收响应 高级特性处理 MIME 头多行响应的管理错误处理与调试 实战案例实现一个简单的邮件客户端实现一个基于 net/textproto 的命令行工具 最佳实践…

【Wamp】局域网设备访问WampServer | 使用域名访问Wamp | Wamp配置HTTPS

局域网设备访问WampServer 参考&#xff1a;https://www.jianshu.com/p/d431a845e5cb 修改Apache的httpd.conf文件 D:\Academic\Wamp\program\bin\apache\apache2.4.54.2\conf\httpd.conf 搜索 Require local 和Require all denied&#xff0c;改为Require all granted <…

从头开始学习扩散模型 Stable Diffusion

今天我们来揭开 Stable Diffusion 技术的神秘面纱。 1.稳定扩散原理 Stable Diffusion 在2022年发表&#xff0c;一种基于Latent Diffusion Models的新兴机器学习技术。它基于扩散过程&#xff0c;利用数学模型将机器学习中的高维度数据降低到低维度空间&#xff0c;并在该空间…

【笔记】dbeaver导出数据库结构+数据 再导入其他数据库

导出&#xff1a; 导入 然后将语句粘贴进去 会有报错 选全部跳过 然后就全部添加成功了 虽然我不知道为什么报错 但是能加进去数据结构和数据都在就无所谓了 第二个版本 DBeaver导出sql脚本&#xff0c;执行sql脚本-CSDN博客 通过工具 DBeaver操作 MySQL导入备份的 sql 报错…

写好计算机类博文的技巧

在信息时代&#xff0c;计算机类博文成为了分享知识和经验的重要渠道。无论你是技术专家&#xff0c;还是爱好者&#xff0c;一篇优秀的计算机类博文不仅能展示你的专业能力&#xff0c;还能帮助他人解决问题。以下是写好计算机类博文的一些技巧&#xff0c;帮助你提升写作质量…

Netgear WN604 downloadFile.php 信息泄露漏洞复现(CVE-2024-6646)

0x01 产品简介 NETGEAR WN604是一款由NETGEAR(网件)公司生产的无线接入器(或无线路由器)提供Wi-Fi保护协议(WPA2-PSK, WPA-PSK),以及有线等效加密(WEP)64位、128位和152位支持,保障网络安全。同时支持MAC地址认证、802.1x RADIUS以及EAP TLS、TTLS、PEAP等安全机制,…

Descriptions 描述列表 label-class-name

需求&#xff1a; 在el-descriptions-item加上label-class-name‘fwText’ :deep(.fwText) { font-weight: bold !important; background-color: #f5f7fa !important; }

【理解C++中的树】

目录 一、树&#xff08;Tree&#xff09;的概念1.1、树的基本定义1.2、基本术语1.2、树的性质 二、二叉树2.1、二叉树的定义2.2、特殊二叉树2.2.1、满二叉树2.2.2、完全二叉树2.2.3、二叉排序树2.2.4、平衡二叉树 .3、二叉树的性质2.4、二叉树存储的实现2.4.1、顺序存储2.4.2、…

【香橙派 AIpro测评:探索高效图片分类项目实战】

前言 最近入手了一块香橙派 AIpro开发板&#xff0c;在使用中被它的强大深深震撼&#xff0c;有感而发写下这篇文章。 本文旨在深入探讨OrangePi AIpro的各项性能&#xff0c;从硬件配置、软件兼容性到实际应用案例&#xff0c;全方位解析这款设备如何在开源社区中脱颖而出&am…

C#与PLC通信——如何设置电脑IP地址

前言&#xff1a; 我们与PLC通过以太网通信时&#xff0c;首先要做的就是先设置好电脑的IP&#xff0c;这样才能实现上位机电脑与PLC之间的通信&#xff0c;并且电脑的ip地址和PLC的Ip地址要同处于一个网段&#xff0c;比如电脑的Ip地址为192.168.1.1&#xff0c;那么PLC的Ip地…

水质监测系统—保障居民饮用水安全

TH-LSZ05自来水水质监测系统是一种用于实时监测自来水质量的技术设备&#xff0c;它对于保障居民饮用水安全具有重要意义。以下是对自来水水质监测系统的详细介绍&#xff1a; 自来水水质监测系统主要由以下几个部分组成&#xff1a; 用于实时监测水质的各种参数&#xff0c;如…

easyExcel 不规则模板导入数据

文章目录 前言一、需求和效果二、难点和思路三、全部代码踩坑 前言 之前分享的 EasyExcel 批量导入并校验数据&#xff0c;仅支持规则excel&#xff0c;即首行表头&#xff0c;下面对应数据&#xff0c;无合并单元格情况。 本篇主要解决问题&#xff1a; 模板excel 表头不在首…

springcolud学习01

创建项目 修改pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.o…

React_自定义组件_下拉框

目录 一、效果图 二、代码 1.直接使用_不和父组件传参 2.作为通用组件使用_和父组件传参 一、效果图 1.未选择任何选项时 2.悬浮效果 3.点击效果 4.选中选项的样式 5.选项太多时效果&#xff0c;&#xff08;设置最大高度200&#xff0c;根据需要自行更改.popover-box样式…

807.力扣每日一题7/14 Java(执行用时分布击败100%)

博客主页&#xff1a;音符犹如代码系列专栏&#xff1a;算法练习关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 目录 解题思路 解题过程 时间复杂度 空间复杂度 Code 解题思路 首先…

188家国产大模型:挑战与机遇,未来杀手级AI应用究竟该长什么样子?

未来的杀手级AI应用究竟该长什么样子&#xff1f;这篇文章里&#xff0c;作者梳理了国内外LLMs基础大模型的特征&#xff0c;并于最后发表了自己关于杀手级AI应用的看法和见解&#xff0c;一起来看一下。 摘要&#xff1a; 本文详细列表展示国外18家&#xff0c;国内188家大模…

<数据集>UA-DETRAC车辆识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;20500张 标注数量(xml文件个数)&#xff1a;20500 标注数量(txt文件个数)&#xff1a;20500 标注类别数&#xff1a;4 标注类别名称&#xff1a;[car, van, others, bus] 序号类别名称图片数框数1car201871259342…

深度学习基础:Numpy 数组包

数组基础 在使用导入 Numpy 时&#xff0c;通常给其一个别名 “np”&#xff0c;即 import numpy as np 。 数据类型 整数类型数组与浮点类型数组 为了克服列表的缺点&#xff0c;一个 Numpy 数组只容纳一种数据类型&#xff0c;以节约内存。为方便起见&#xff0c;可将 Nu…

Jira学习

1.Dev OPS DevOps简介 DEV OPS 流程 DEV OPS流程对应工具 最重要的就是持续集成–Jenkins 2.Jira 新建项目