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

很多小型的规模场景限制下,复杂概念弊端大于利端。不同模式的实现,是根据具体需求来判定,但是理解底层最基础的原理有助于理解很多工具背后的诞生。比如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和简单交互也可以实现。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【竞技宝】欧洲杯:南门的保守害了英格兰

2024欧洲杯已经结束,决赛中西班牙2比1击败英格兰,队史第四次拿到欧洲杯冠军,而英格兰连续两届比赛进入决赛却功亏一篑让人唏嘘不已。赛后关于英格兰主帅索斯盖特是否留任的问题再次被炒上热搜,不少球迷和媒体认为索帅拥有豪华阵容…

华为大咖说 | 企业应用AI大模型的“道、法、术” —— 法:落地篇 (下)

本文作者:郑岩(华为云AI变革首席专家)全文约3554字,阅读约需9分钟 上周,我们探讨了企业应用AI大模型的“道、法、术”——法:落地篇“AI变革五阶八步法”的前四步内容(华为大咖说 | 企业应用AI大…

使用 HttpServlet 接收网页的 post/get 请求

前期工作:部署好 idea 和 一个 web 项目 idea(2021),tomcat(9) ->创建一个空的项目 -> 新建一个空的模块 -> 右键单击模块 选择 Add..Fra.. Sup.. -> 勾选Web App...后点击OK -> 点击 file - Project Struc... -> 选择刚刚的模块 -> 点…

C++初阶:类和对象(中)

一.类的默认成员函数 默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称为默认成员函数。⼀个类,我们不写的情况下编译器会默认生成以下6个默认成员函数。默认成员函数很重要,也比较复杂: 二.构造函数 (…

GPT-4从0到1搭建一个Agent简介

GPT-4从0到1搭建一个Agent简介 1. 引言 在人工智能领域,Agent是一种能够感知环境并采取行动以实现特定目标的系统。本文将简单介绍如何基于GPT-4搭建一个Agent。 2. Agent的基本原理 Agent的核心是感知-行动循环(Perception-Action Loop)…

电脑文件误删除如何恢复?Top12电脑数据恢复软件汇总合集!(图文详解)

电脑文件误删除如何恢复?在日常使用电脑过程中,我们经常会遇到意外删除文件的情况。可能是因为按错了按键、误操作了鼠标,或者意外格式化了存储设备。这些情况都可能导致重要的文件不小心被删除。但是不用担心,有许多专业的数据恢…

从 Pandas 到 Polars 十八:数据科学 2025,对未来几年内数据科学领域发展的预测或展望

我在2021年底开始使用Polars和DuckDB。我立刻意识到这些库很快就会成为数据科学生态系统的核心。自那时起,这些库的受欢迎程度呈指数级增长。 在这篇文章中,我做出了一些关于未来几年数据科学领域的发展方向和原因的预测。 这篇文章旨在检验我的预测能力…

Js 前置,后置补零的原生方法与补字符串 padStart及padEnd

在工作中,遇到了需要将不满八位的一个字符串进行后补0的操作,所以就在网上学习了关于js原生补充字符串的方法,然后用这篇博客记录下来。 目录 前置补充字符串 String.prototype.padStart() 后置补充字符串String.prototype.padEnd() 前置补…

synchronized关键字详解

文章目录 synchronized使用示例实现原理锁的升级synchronized与可见性synchronized与原子性synchronized与有序性 synchronized synchronized是Java提供的关键字译为同步,是Java中用于实现线程同步的一种机制。它可以确保在同一时间只有一个线程能够执行某段代码&a…

STM32第十九课:FreeRTOS移植和使用

目录 需求一、FreeRtos概要二、移植FreeRtos1.复制源码2.内存空间分配和内核相关接口3.FreeRTOSConfig.h4.在工程中添加.c.h 三、任务块操作1.创建任务2.任务挂起,恢复,删除 四、需求实现代码 需求 1.将FreeRtos(嵌入式实时操作系统&#xf…

STM32 BootLoader 刷新项目 (四) 通信协议

STM32 BootLoader 刷新项目 (四) 通信协议 文章目录 STM32 BootLoader 刷新项目 (四) 通信协议1. 通信流程2. 支持指令3. 通信流程4. 指令结构5. 操作演示 前面几章节,我们已经介绍了BootLoader的整体程序框架,方案设计,以及STM32CubdeMX的配…

Kafka基本原理|特性

Kafka是什么 Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统 它的最大的特性就是可以实时的处理大量数据以满足各种需求场景…

等保五级分类详解:从自主保护到专控保护的全方位信息安全

等保,即信息安全等级保护,是一项旨在保障电子信息系统安全的重要标准。根据系统所承载的信息重要性和可能遭受的损害程度,等保将信息系统划分为五个不同的安全等级。每个等级都有其特定的安全要求和测评周期,以确保不同规模和类型…

ES13的4个改革性新特性

1、类字段声明 在 ES13 之前,类字段只能在构造函数中声明, ES13 消除了这个限制 // 之前 class Car {constructor() {this.color = blue;this.age = 2

大气热力学(8)——热力学图的应用之一(气象要素求解)

本篇文章源自我在 2021 年暑假自学大气物理相关知识时手写的笔记,现转化为电子版本以作存档。相较于手写笔记,电子版的部分内容有补充和修改。笔记内容大部分为公式的推导过程。 文章目录 8.1 复习斜 T-lnP 图上的几种线8.1.1 等温线和等压线8.1.2 干绝热…

一个老程序员对小浣熊 AI 办公助手的使用体验

我是一个老程序员,今年 42 岁,仍然在一线编程领域工作。 2022 年底以 ChatGPT 为代表的 AI 工具席卷整个业界后,我也使用了不少能提高办公效率的 AI 工具。比如程序员的好帮手,来自微软的 Copilot. 这款名叫小浣熊的 AI 办公工具…

Web 性能入门指南-1.2 分析在线零售 Web 性能及优化方向

让顾客满意是零售业成功的秘诀。事实证明,提供快速、一致的在线体验可以显著提高零售商关心的每项指标——从转化率和收入到留存率和品牌认知度。 本文大纲: 页面速度影响在线零售业务数据 如何将您的网站速度与竞争对手进行比较 性能优化入门&#xf…

怎样在 PostgreSQL 中优化对复合索引的选择性?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 怎样在 PostgreSQL 中优化对复合索引的选择性一、理解复合索引的概念二、选择性的重要性三、优化复合索…

神经网络识别数字图像案例

学习资料:从零设计并训练一个神经网络,你就能真正理解它了_哔哩哔哩_bilibili 这个视频讲得相当清楚。本文是学习笔记,不是原创,图都是从视频上截图的。 1. 神经网络 2. 案例说明 具体来说,设计一个三层的神经网络。…

采用自动微分进行模型的训练

自动微分训练模型 简单代码实现: import torch import torch.nn as nn import torch.optim as optim# 定义一个简单的线性回归模型 class LinearRegression(nn.Module):def __init__(self):super(LinearRegression, self).__init__()self.linear nn.Linear(1, 1) …