你对swoole的进程,线程知道多少

swoole教程栏目介绍swoole的进程线程

你对swoole的进程,线程知道多少

推荐(免费):swoole教程
进程

1、进程之间不共享任何状态
2、进程的调度由操作系统完成
3、每个进程都有自己独立的内存空间
4、进程间通讯主要是通过信号传递的方式来实现的,实现方式有多种,信号量、管道、事件等,任何一种方式的通讯效率都需要过内核,导致通讯效率比较低
5、由于是独立的内存空间,上下文切换的时候需要保存先调用栈的信息、cpu各寄存器的信息、虚拟内存、以及打开的相关句柄等信息,所以导致上下文进程间切换开销很大,通讯麻烦。

线程

1、线程之间共享变量,解决了通讯麻烦的问题对于变量的访问需要锁
2、一个进程可以拥有多个线程,但是其中每个线程会共享父进程像操作系统申请资源,这个包括虚拟内存、文件等,由于是共享资源,所以创建线程所需要的系统资源占用比进程小很多,相应的可创建的线程数量也变得相对多很多。
3、另外在调度方面也是由于内存是共享的,所以上下文切换的时候需要保存的东西就像对少一些,这样一来上下文的切换也变得高效。

解释

通过php,运行一个php文件,这个时候就相当于我们创建了一个进程,这个进程会在系统中驻存,申请属于它自己的内存空间系统资源并且运行相应的程序。
在这里插入图片描述

swoole进程

在这里插入图片描述
1、Master进程:主进程
2、Manger进程:管理进程
3、Worker进程:工作进程
4、Task进程:异步任务工作进程

第一层,Master进程,这个是swoole的主进程,这个进程是用于处理swoole的核心事件驱动的,那么在这个进程当中可以看到它拥有一个MainReactor[线程]以及若干个Reactor[线程],swoole所有对于事件的监听都会在这些线程中实现,比如来自客户端的连接,信号处理等。

立即进入“豆包AI人工智官网入口”;

立即学习“豆包AI人工智能在线问答入口”;

1.1、MainReactor(主线程)
主线程会负责监听server socket,如果有新的连接accept,主线程会评估每个Reactor线程的连接数量。将此连接分配给连接数最少的reactor线程,做一个负载均衡。

1.2 、Reactor线程组
Reactor线程负责维护客户端机器的TCP连接、处理网络IO、收发数据完全是异步非阻塞的模式。
swoole的主线程在Accept新的连接后,会将这个连接分配给一个固定的Reactor线程,在socket可读时读取数据,并进行协议解析,将请求投递到Worker进程。在socket可写时将数据发送给TCP客户端。

1.3、心跳包检测线程(HeartbeatCheck)
Swoole配置了心跳检测之后,心跳包线程会在固定时间内对所有之前在线的连接
发送检测数据包

1.4、UDP收包线程(UdpRecv)
接收并且处理客户端udp数据包

swoole想要实现最好的性能必须创建出多个工作进程帮助处理任务,但Worker进程就必须fork操作,但是fork操作是不安全的,如果没有管理会出现很多的僵尸进程,进而影响服务器性能,同时worker进程被误杀或者由于程序的原因会异常退出,为了保证服务的稳定性,需要重新创建worker进程。

Swoole在运行中会创建一个单独的管理进程,所有的worker进程和task进程都是从管理进程Fork出来的。管理进程会监视所有子进程的退出事件,当worker进程发生致命错误或者运行生命周期结束时,管理进程会回收此进程,并创建新的进程。换句话也就是说,对于worker、task进程的创建、回收等操作全权有“保姆”Manager进程进行管理

worker 进程属于swoole的主逻辑进程,用户处理客户端的一系列请求,接受由Reactor线程投递的请求数据包,并执行PHP回调函数处理数据生成响应数据并发给Reactor线程,由Reactor线程发送给TCP客户端可以是异步非阻塞模式,也可以是同步阻塞模式

taskWorker进程这一进城是swoole提供的异步工作进程,这些进程主要用于处理一些耗时较长的同步任务,在worker进程当中投递过来。

client跟server的交互:

1、client请求到达 Main Reactor,Client实际上是与Master进程中的某个Reactor线程发生了连接。

2、Main Reactor根据Reactor的情况,将请求注册给对应的Reactor (每个Reactor都有epoll。用来监听客户端的变化)

3、客户端有变化时Reactor将数据交给worker来处理

4、worker处理完毕,通过进程间通信(比如管道、共享内存、消息队列)发给对应的reactor。

5、reactor将响应结果发给相应的连接请求处理完成

Master进程内的回调函数

onStart Server启动在主进程的主线程回调此函数onShutdown 此事件在Server正常结束时发生

Manager进程内的回调函数

onManagerStart 当管理进程启动时调用它onManagerStop 当管理进程结束时调用它onWorkerError 当worker/task_worker进程发生异常后会在Manager进程内回调此函数

Worker进程内的回调函数

onWorkerStart 此事件在Worker进程/Task进程启动时发生onWorkerStop 此事件在worker进程终止时发生。onConnect 有新的连接进入时,在worker进程中回调onClose TCP客户端连接关闭后,在worker进程中回调此函数onReceive 接收到数据时回调此函数,发生在worker进程中onPacket 接收到UDP数据包时回调此函数,发生在worker进程中onFinish 当worker进程投递的任务在task_worker中完成时,task进程会通过finish()方法将任务处理的结果发送给worker进程。onWorkerExit 仅在开启reload_async特性后有效。异步重启特性onPipeMessage 当工作进程收到由 sendMessage 发送的管道消息时会触发事件

Task进程内的回调函数

onTask 在task_worker进程内被调用。worker进程可以使用swoole_server_task函数向task_worker进程投递新的任务onWorkerStart 此事件在Worker进程/Task进程启动时发生onPipeMessage 当工作进程收到由 sendMessage 发送的管道消息时会触发事件

简单说明:

1、服务器关闭程序终止时最后一次事件是onShutdown。2、服务器启动成功后,onStart/onManagerStart/onWorkerStart会在不同的进程内并发执行,并不是顺序的。3、所有事件回调均在$server->start后发生,start之后写的代码是无效代码。4、onStart/onManagerStart/onWorkerStart 3个事件的执行顺序是不确定的

swoole运行流程图

在这里插入图片描述

set([    'worker_num'=>3, //设置进程    //'heartbeat_idle_time'=>10,//连接最大的空闲时间    //'heartbeat_check_interval'=>3 //服务器定时检查    'open_length_check'=>1,    'package_length_type'=>'N',//设置包头的长度    'package_length_offset'=>0, //包长度从哪里开始计算    'package_body_offset'=>4,  //包体从第几个字节开始计算    'package_max_length'=>1024 * 1024 * 2,]);$server->on("Start",function (){    var_dump(1);     //设置主进程的名称     swoole_set_process_name("server-process:master");});//服务关闭时候触发(信号)$server->on("shutdown",function (){});//当管理进程启动时调用它$server->on('ManagerStart',function (){    var_dump(2);    //swoole_set_process_name("server-process:manger");});$server->on('WorkerStart',function ($server,$workerId){   // swoole_set_process_name("server-process:worker");    var_dump(3);});//监听事件,连接事件(woker进程当中)$server->on('connect',function ($server,$fd){    echo "新的连接进入:{$fd}".PHP_EOL;});//消息发送过来(woker进程当中)$server->on('receive',function (swoole_server $server, int $fd, int $reactor_id, string $data){    //var_dump("消息发送过来:".$data);    //服务端});//消息关闭$server->on('close',function (){    echo "消息关闭".PHP_EOL;});//服务器开启$server->start();echo '123456';
进程

1、进程之间不共享任何状态
2、进程的调度由操作系统完成
3、每个进程都有自己独立的内存空间
4、进程间通讯主要是通过信号传递的方式来实现的,实现方式有多种,信号量、管道、事件等,任何一种方式的通讯效率都需要过内核,导致通讯效率比较低
5、由于是独立的内存空间,上下文切换的时候需要保存先调用栈的信息、cpu各寄存器的信息、虚拟内存、以及打开的相关句柄等信息,所以导致上下文进程间切换开销很大,通讯麻烦。

线程

1、线程之间共享变量,解决了通讯麻烦的问题对于变量的访问需要锁
2、一个进程可以拥有多个线程,但是其中每个线程会共享父进程像操作系统申请资源,这个包括虚拟内存、文件等,由于是共享资源,所以创建线程所需要的系统资源占用比进程小很多,相应的可创建的线程数量也变得相对多很多。
3、另外在调度方面也是由于内存是共享的,所以上下文切换的时候需要保存的东西就像对少一些,这样一来上下文的切换也变得高效。

解释

通过php,运行一个php文件,这个时候就相当于我们创建了一个进程,这个进程会在系统中驻存,申请属于它自己的内存空间系统资源并且运行相应的程序。
在这里插入图片描述

swoole进程

在这里插入图片描述
1、Master进程:主进程
2、Manger进程:管理进程
3、Worker进程:工作进程
4、Task进程:异步任务工作进程

第一层,Master进程,这个是swoole的主进程,这个进程是用于处理swoole的核心事件驱动的,那么在这个进程当中可以看到它拥有一个MainReactor[线程]以及若干个Reactor[线程],swoole所有对于事件的监听都会在这些线程中实现,比如来自客户端的连接,信号处理等。

立即进入“豆包AI人工智官网入口”;

立即学习“豆包AI人工智能在线问答入口”;

1.1、MainReactor(主线程)
主线程会负责监听server socket,如果有新的连接accept,主线程会评估每个Reactor线程的连接数量。将此连接分配给连接数最少的reactor线程,做一个负载均衡。

1.2 、Reactor线程组
Reactor线程负责维护客户端机器的TCP连接、处理网络IO、收发数据完全是异步非阻塞的模式。
swoole的主线程在Accept新的连接后,会将这个连接分配给一个固定的Reactor线程,在socket可读时读取数据,并进行协议解析,将请求投递到Worker进程。在socket可写时将数据发送给TCP客户端。

1.3、心跳包检测线程(HeartbeatCheck)
Swoole配置了心跳检测之后,心跳包线程会在固定时间内对所有之前在线的连接
发送检测数据包

1.4、UDP收包线程(UdpRecv)
接收并且处理客户端udp数据包

swoole想要实现最好的性能必须创建出多个工作进程帮助处理任务,但Worker进程就必须fork操作,但是fork操作是不安全的,如果没有管理会出现很多的僵尸进程,进而影响服务器性能,同时worker进程被误杀或者由于程序的原因会异常退出,为了保证服务的稳定性,需要重新创建worker进程。

Swoole在运行中会创建一个单独的管理进程,所有的worker进程和task进程都是从管理进程Fork出来的。管理进程会监视所有子进程的退出事件,当worker进程发生致命错误或者运行生命周期结束时,管理进程会回收此进程,并创建新的进程。换句话也就是说,对于worker、task进程的创建、回收等操作全权有“保姆”Manager进程进行管理

worker 进程属于swoole的主逻辑进程,用户处理客户端的一系列请求,接受由Reactor线程投递的请求数据包,并执行PHP回调函数处理数据生成响应数据并发给Reactor线程,由Reactor线程发送给TCP客户端可以是异步非阻塞模式,也可以是同步阻塞模式

taskWorker进程这一进城是swoole提供的异步工作进程,这些进程主要用于处理一些耗时较长的同步任务,在worker进程当中投递过来。

client跟server的交互:

1、client请求到达 Main Reactor,Client实际上是与Master进程中的某个Reactor线程发生了连接。

2、Main Reactor根据Reactor的情况,将请求注册给对应的Reactor (每个Reactor都有epoll。用来监听客户端的变化)

3、客户端有变化时Reactor将数据交给worker来处理

4、worker处理完毕,通过进程间通信(比如管道、共享内存、消息队列)发给对应的reactor。

5、reactor将响应结果发给相应的连接请求处理完成

Master进程内的回调函数

onStart Server启动在主进程的主线程回调此函数onShutdown 此事件在Server正常结束时发生

Manager进程内的回调函数

onManagerStart 当管理进程启动时调用它onManagerStop 当管理进程结束时调用它onWorkerError 当worker/task_worker进程发生异常后会在Manager进程内回调此函数

Worker进程内的回调函数

onWorkerStart 此事件在Worker进程/Task进程启动时发生onWorkerStop 此事件在worker进程终止时发生。onConnect 有新的连接进入时,在worker进程中回调onClose TCP客户端连接关闭后,在worker进程中回调此函数onReceive 接收到数据时回调此函数,发生在worker进程中onPacket 接收到UDP数据包时回调此函数,发生在worker进程中onFinish 当worker进程投递的任务在task_worker中完成时,task进程会通过finish()方法将任务处理的结果发送给worker进程。onWorkerExit 仅在开启reload_async特性后有效。异步重启特性onPipeMessage 当工作进程收到由 sendMessage 发送的管道消息时会触发事件

Task进程内的回调函数

onTask 在task_worker进程内被调用。worker进程可以使用swoole_server_task函数向task_worker进程投递新的任务onWorkerStart 此事件在Worker进程/Task进程启动时发生onPipeMessage 当工作进程收到由 sendMessage 发送的管道消息时会触发事件

简单说明:

1、服务器关闭程序终止时最后一次事件是onShutdown。2、服务器启动成功后,onStart/onManagerStart/onWorkerStart会在不同的进程内并发执行,并不是顺序的。3、所有事件回调均在$server->start后发生,start之后写的代码是无效代码。4、onStart/onManagerStart/onWorkerStart 3个事件的执行顺序是不确定的

swoole运行流程图

在这里插入图片描述

set([    'worker_num'=>3, //设置进程    //'heartbeat_idle_time'=>10,//连接最大的空闲时间    //'heartbeat_check_interval'=>3 //服务器定时检查    'open_length_check'=>1,    'package_length_type'=>'N',//设置包头的长度    'package_length_offset'=>0, //包长度从哪里开始计算    'package_body_offset'=>4,  //包体从第几个字节开始计算    'package_max_length'=>1024 * 1024 * 2,]);$server->on("Start",function (){    var_dump(1);     //设置主进程的名称     swoole_set_process_name("server-process:master");});//服务关闭时候触发(信号)$server->on("shutdown",function (){});//当管理进程启动时调用它$server->on('ManagerStart',function (){    var_dump(2);    //swoole_set_process_name("server-process:manger");});$server->on('WorkerStart',function ($server,$workerId){   // swoole_set_process_name("server-process:worker");    var_dump(3);});//监听事件,连接事件(woker进程当中)$server->on('connect',function ($server,$fd){    echo "新的连接进入:{$fd}".PHP_EOL;});//消息发送过来(woker进程当中)$server->on('receive',function (swoole_server $server, int $fd, int $reactor_id, string $data){    //var_dump("消息发送过来:".$data);    //服务端});//消息关闭$server->on('close',function (){    echo "消息关闭".PHP_EOL;});//服务器开启$server->start();echo '123456';

以上就是你对swoole的进程,线程知道多少的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/81649.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月15日 22:43:22
下一篇 2025年11月15日 23:02:45

相关推荐

  • 交易所排名 币圈前十交易所有哪些

    在数字资产的世界里,%ignore_a_1%交易所扮演着至关重要的角色,它们是连接普通用户与复杂加密金融市场的核心桥梁。这些平台不仅仅提供简单的买卖服务,其业务范围已经扩展到涵盖衍生品交易、资产质押、流动性挖框、新项目发行乃至去中心化金融应用的入口等多个维度。一个交易所的综合实力,通常通过其交易量、…

    2025年12月8日 好文分享
    000
  • 比安官网地址链接 比安最新官网地址

    比安,即binance,是全球领先的数字货币交易平台之一。该平台成立于2017年,迅速发展成为全球用户量和交易量最大的加密货币交易平台。binance提供包括现货交易、合约交易、期权交易等在内的多种交易服务,支持数百种加密货币的交易对。平台以其高流动性、相对较低的交易费用以及强大的技术架构而受到全球…

    2025年12月8日
    000
  • Binance、OKX、Gate.io对比:2025年手续费、杠杆、流动性谁最强?

    2025年选择合适的加密货币交易平台需重点考量手续费、杠杆和流动性。1. Binance手续费分层,普通用户现货费率为0.1%,使用BNB可享折扣,未来或优化费率并丰富BNB应用场景;2. OKX合约杠杆最高达125倍,风控机制完善,未来将拓展衍生品并提升交易稳定性;3. Gate.io资产种类多样…

    2025年12月8日
    000
  • ​​炒币从0到百万:十大必备APP​​+新手必看指南

    本文精选了十大必备应用,助你从零开始构建数字资产领域的工具箱。1. 选择Binance、OKX等综合性交易平台作为主战场;2. 使用MetaMask、Trust Wallet等钱苞管理资产并探索DeFi;3. 借助TradingView进行专业行情分析;4. 利用金色财经、BlockBeats获取实…

    2025年12月8日
    000
  • 什么是侧链技术?

    众所周知,区块链由四大核心技术组成,但这些核心技术仍无法完全解决一些关键问题,例如长期被讨论的效率低下和可扩展性不足。所谓可扩展性问题,是指随着系统运行时间的增长,其性能和功能难以同步提升。 为应对这些问题,区块链引入了多种新技术,其中侧链技术是一种较为流行的解决方案。 所谓的侧链(Sidechai…

    2025年12月8日
    000
  • 区块链的分类

    大家都知道,区块链最初是作为比特币的底层技术出现的。但随着时间推移,人们逐渐意识到这项技术的独特优势:自2009年起,在没有任何公司掌控的情况下,比特币系统一直稳定运行,并且从未遭受过成功攻击。于是,区块链被单独提取出来进行优化,并逐步应用于金融、物流等多个行业。 从本质上看,区块链是一种大规模的分…

    2025年12月8日
    000
  • 区块链为什么叫区块链?

    2009年1月3日,中本聪在芬兰赫尔辛基的一台小型服务器上挖出了首批比特币,标志着比特币的正式诞生。到了2010年5月22日,一位程序员用1万枚比特币购买了两块披萨,这是比特币首次被赋予现实中的价格。作为区块链技术的第一个实际应用,比特币广为人知,但其背后的区块链技术却并不为大众所深入了解。那么,这…

    2025年12月8日
    000
  • Synthetix Network (SNX) 价格预测 2025:未来价格走势如何?

    Synthetix Network (SNX) 价格预测 2025:未来价格走势如何? 随着比特币逼近 11 万美元大关及 Web3 生态的技术突破,去中心化金融(DeFi)赛道正重回市场焦点。作为合成资产协议龙头,Synthetix Network(SNX)凭借其独特的衍生品交易模型,成为投资者关…

    2025年12月8日
    000
  • Pi Network价格走势分析:Pi 币能否维持 0.40 美元的水平?

    在代币解锁压力和看跌势头下,Pi 币能否维持 0.40 美元的水平 随着第六根红色蜡烛持续下跌,山寨币价格持续走低,许多投资者不禁思考:在抛售压力不断加大、代币供应量释放如此之多的情况下,0.40美元能否成为可靠的支撑位?本文深入探讨短期前景,包括看跌的价格走势、Pi2Day之后的疲软情绪以及反转的…

    2025年12月8日 好文分享
    000
  • 最新山寨币总榜_山寨币热门榜

    【权威推荐】2025主流数字货币交易平台合集 Binance币安 官网直达: 安卓安装包下载: 欧易OKX ️ 官网直达: 安卓安装包下载: Huobi火币️ 官网直达: 安卓安装包下载: 2025年7月2日 山寨币热门榜单 截至2025年7月2日,山寨币市场呈现出多样化的表现,以下是当前市值较高且…

    2025年12月8日
    000
  • NEWT 代币价格预测2025-2030年:未来价格如何?

    newton protocol (newt) 作为 sui 生态系统内的去中心化基础设施项目,近期因入选币安 hodler 空投计划引发市场关注。该协议旨在通过可信执行环境(tee)和零知识证明(zkp)技术,构建可验证的链上自动化层,解决传统中心化机器人的透明度与信任缺陷。截至 2025 年 6 …

    2025年12月8日
    000
  • MemeCore(M)是什么?如何运作?一文读懂$M代币

    目录 什么是 MemeCore(M)MemeCore(M)的工作原理模因证明(PoM)解释Meme Vaults:生态系统的核心病毒补助金储备模因 (MRC-20) 储备MemeCore 如何运作?PoM 共识机制奖励分配机制ERC-20 代币金库什么是$M 代币? 迷因是社区文化、幽默和群体意识的…

    2025年12月8日
    000
  • MemeX是什么?如何运作?MemeX迷因币是否值得投资?

    目录 什么是MemeX?一站式迷因币发行平台MemeX和MemeCore有何关系?MemeX 是如何运作的?MemeX 代币经济学MemeX上线Kaito,发放70万美元奖励总结 memex是一个基于memecore主网构建的社交启动平台,旨在解决「meme 社群碎片化」的问题,打造「一个meme …

    2025年12月8日 好文分享
    000
  • 以太坊(ETH)生态再扩容:从“世界计算机”到多层创新的演进

    当比特币因ETF的落地而成为全球资金的新宠时,以太坊的变化正在更深层次上重塑加密世界的基础设施。 自诞生以来,以太坊就被誉为“世界计算机”,是智能合约与去中心化应用(dApps)的起点。但伴随DeFi、NFT、DAO等新兴应用爆发式增长,以太坊自身也面临了可扩展性、交易成本与用户体验的多重挑战。 最…

    2025年12月8日
    000
  • 加密货币市场涨幅榜:CoinGecko 热门列表及上涨驱动因素

    深入解析 coingecko 推荐的加密市场涨幅领先资产。探索驱动这些数字资产上涨的趋势、背景分析及未来潜力。 加密市场热门资产:CoinGecko 涨幅榜单与背后推动力 加密货币领域持续变化,CoinGecko 提供了当前表现最佳的资产数据。让我们一同探讨影响市场走势的关键因素,并识别哪些代币正成…

    2025年12月8日
    000
  • Binance Alpha最新积分规则:历史收益如何?现在还能玩吗?

    目录 Binance Alpha最新积分规则Binance alpha 历史收益如何?参与数据一览ZKJ 与KOGE 币价崩盘事件现在刷Binance Alpha 还有收益吗 ?Binance Alpha最新活动- Codatta($XNY) 预售与推广活动(Pre-TGE & Booste…

    2025年12月8日 好文分享
    000
  • Hifi Finance 是什么?HIFI 代币价格预测2025-2030年

    Hifi Finance 是什么?HIFI 代币价格预测2025-2030年 Hifi Finance(前身为 Mainframe)是一个建立在以太坊区块链上的去中心化借贷协议,核心使命是解决传统 DeFi 借贷中利率波动过大的痛点,为用户提供固定利率借贷服务。该项目最初于 2017 年 11 月启…

    2025年12月8日
    000
  • Chainlink的图表模式暗示了重大走势:解读LINK价格

    chainlink(link)近期引发热议,其技术图表上出现的潜在看涨形态吸引了大量关注。是否将迎来大幅上涨?我们来分析一下技术走势与市场观点。 朋友们,Chainlink(LINK)最近在价格图表上动作频频,交易者们注意到了一些可能预示价格剧烈波动的模式。我们一起来看看当前的走势,并用通俗易懂的方…

    2025年12月8日
    000
  • 索拉纳(SOL)价格在ETF消息后反弹至161美元,但涨势能否持续?

    Solana的ETF推出引发短暂反弹,但在竞争激烈的环境下,基本面和机构需求仍然疲弱 Solana的原生代币SOL在周一确认首只具备质押功能的Solana交易所交易基金(ETF)将于周三推出后暴涨7%。这一消息促使交易者猜测它是否能刺激机构需求并推动SOL价格突破200美元。 SOL/USD,12小…

    2025年12月8日 好文分享
    000
  • 币安第25期HODLer空投来袭,1.25亿SAHARA等你来瓜分

    在当今科技飞速发展的时代,人工智能与区块链的融合正逐渐成为新的趋势。sahara ai (sahara) 项目应运而生,它致力于打造首个全栈 ai 原生区块链平台,让人工智能的未来更加触手可及、公平公正,并面向所有人开放。 一、颠覆未来!Sahara AI 如何重构 AI 与区块链的边界? Saha…

    2025年12月8日
    000

发表回复

登录后才能评论
关注微信