Swoole v6 能否让 PHP 再次伟大?

news2024/11/18 6:22:49

大家好,我是码农先森。

现状

传统的 PHP-FPM 也是多进程模型的的运行方式,但每个进程只能处理完当前请求,才能接收下一个请求。而且对于 PHP 脚本来说,只是接收请求和响应请求,并不参与网络通信。对数据库资源的操作,也是一次请求一次有效,用完即销毁不能复用,在系统高负载的情况下对数据库等资源的消耗会很大,能承受的并发量有限。

Swoole 的出现给 PHP 带来了一种新的运行方式,完全接管了 PHP-FPM 的功能,并且弥补了 PHP 在异步网络通信领域的空白。Swoole 提供了 PHP 的全生命周期管理,此外 Swoole 的常驻进程模式,也能够高效的利用资源,比如可以建立数据库连接池、共享内存变量等。还有 Swoole 中能够支撑高并发的利器「协程」,更加使 PHP 的性能上了一个新的台阶,甚至在某些特定场景下都可以与 Go 语言的性能相媲美。

虽说 Swoole 给 PHP 带来了很大的性能提升,但也还是一个基于多进程模型的异步通信扩展,多进程的模式也存在着许多的问题,比如跨进程间的通信、进程间的资源共享等问题。简而言之,多进程会带来一定的系统资源消耗及产生新的问题。

因此 Swoole 官方为了解决多进程的问题,引进了多线程的支持,这意味着 v6 版本之后,Swoole 将会变成单进程多线程的运行模式。

v6 新特性

根据 Swoole 作者韩天峰发布的预告,在 v6 版本中增加多线程的支持。其中多线程的实现是基于 PHP 的 ZTS 机制和 TSRM API,在 PHP 层面隔离所有全局变量,实现线程安全。Swoole v6 的多线程将是真正的多线程实现,在单进程的模式下所有的 PHP 程序代码均是在多核并行执行,能够高效的利用好 CPU 资源。

v6 版本还提供了线程安全的 Map 和 ArrayList 数据结构,可以实现跨线程的数据共享读写。在 Server 端的 Event Worker、Task Worker、User Process 等将全部替换为 线程的运行方式,在同一个进程空间内执行,彻底摒弃了多进程的模式。

当然新的特性势必会带来新的开销,对于 Map 等共享的数据结构在多线程的模式下需要加锁,来避免数据竞争,可能会损耗一些性能。

以下是列举的一些线程相关的 API 方法:

  • use Swoole\Thread 线程对象。
  • use Swoole\Thread\Map 线程安全下的 Map 数据结构。
  • use Swoole\Thread\ArrayList 线程安全下的 ArrayList 数据结构。
  • Swoole\Thread::getId() 获取当前线程的 ID。
  • Swoole\Thread::getArguments() 获取父线程传递给子线程的参数列表。
  • Swoole\Thread::join() 等待子线程退出,请注意 $thread 对象销毁时会自动执行 join() ,这可能会导致进程阻塞。
  • Swoole\Thread::joinable() 检测子线程是否已退出。
  • Swoole\Thread::detach() 使子线程独立运行,不再需要 Thread::join()。
  • Swoole\Thread::HARDWARE_CONCURRENCY 硬件层支持的并行线程数量。
  • Swoole\Thread::$id 获取子线程的 ID。
  • Swoole\Thread::exec() 开启一个新的线程。

最后

自 Swoole 从 2012 年发布第一个版本开始,就扛起了 PHP 领域异步通信的大旗,但这多年以来 Swoole 的发展也是实属不易。还记得刚开始时的异步回调模式的套娃式编程方式,开发起来异常艰难,到后来的同步式编程,直接降低了PHP程序员的学习门槛,让 PHP 在实时通信、物联网通信、游戏开发等领域也能大展拳脚,同时在 PHP 的发展史上也产生了重大的影响。

随着 Go 语言在编程界的持续火热,Swoole 常常被 PHP 程序员拿来和 Go 语言一决高下,总是被诟病 Swoole 无法有效利用多核 CPU、进程间的通信困难等问题。话又说回来,Swoole 作为一个 PHP 的扩展程序和天生具有高性能的 Go 语言自然是不可比拟的,但 Swoole 也是在逐渐的向 Go 语言靠近,比如 Swoole 中也使用了「go、channel」关键词来实现协程及通信通道,虽说底层的实现机制还是大不相同的。

当然 Swoole 也在不断地努力持续优化,就像将要推出的 v6 版本增加多线程的支持,来改变目前多进程的局面。至于这个版本对 PHP 发展来说有没有很大的影响,我认为影响有限。但对 Swoole 的发展还是有很大的影响,毕竟以后再也不用受多进程的困扰了,这也是一大进步。

在 Web 领域作为世界上最好的语言,尽管 PHP 近年来的发展不尽如人意,但作为一名 PHPer 也有必要和有义务一起来维护和推动 PHP 生态的发展。


欢迎关注、分享、点赞、收藏、在看,我是微信公众号「码农先森」作者。

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

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

相关文章

Arm Linux 修改 网络 mac 地址的方式方法

一、指令修改 查看网络信息指令 ifconfig修改网络 mac 地址,指令 ifconfig 网卡名 hw ether mac地址例如: ifconfig eth0 hw ether 08:00:27:00:01:96二、C语言程序修改 1.使用 ioctl 和 SIOCSIFHWADDR 来设置MAC地址,示例代码如下&…

【计算机毕业设计】087基于微信小程序社区养老服务

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

“ONLYOFFICE 8.1:提升用户体验和编辑功能的全面升级”

引言 官网链接 在当今快节奏的工作环境中,高效地处理文档是每个职场人士必备的技能。ONLYOFFICE 桌面编辑器凭借其强大的功能和用户友好的界面,成为了提升文档处理效率的得力助手。本文将介绍 ONLYOFFICE 桌面编辑器的核心特性,并展示如何通…

乐鑫已支持Matter 1.2标准新增多种设备类型,启明云端乐鑫代理商

随着物联网技术的飞速发展,智能家居正逐渐成为现代生活的一部分。物联网和智能家居行业应用取得了巨大的增长,一系列无线连接的智能设备涌入家庭,为家庭生活带来自动化和便利。 像是可以连网的扬声器、灯泡和中控开关,它们都可以…

AI Workflow的敏捷开发:持续创新与优化的艺术

在人工智能的浪潮中,AI Workflow作为大模型落地的关键实践,正逐渐成为技术领域的新宠。然而,随着技术的发展,我们面临着一系列挑战,如何有效地应对这些挑战,实现AI Workflow的敏捷开发,成为了一…

ROS学习记录:Hector_Mapping建图的参数设置

前言 launch文件启动Hector_Mapping的建图功能 在上一篇文章(以上链接)通过launch文件启动了Hector_Mapping建图功能,这一篇文章将在launch文件里给Hector_Mapping设置参数 一、Hector_Mapping有哪些参数 1、浏览器搜索并进入 ROS index 2…

使用CDN方式创建Vue3.0应用程序

CDN 的全称是 content delivery network,即内容分发网络。它是构建在现在的互联网基础之上的一层智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发和调度等功能模块,使用户就近获取所需内容&#xff0c…

Proxmox VE(PVE)上手配置指南

Proxmox VE(PVE)是一款开源虚拟化管理平台,集成了KVM和LXC技术,支持虚拟机和容器管理。它提供了一个基于Web的用户界面,支持高可用性集群、备份和恢复、实时迁移等功能,适用于企业级虚拟化环境。. 以下为安…

每日一道算法题 有效括号序列

题目 有效括号序列_牛客题霸_牛客网 (nowcoder.com) Python 1长度必须为偶数 2就像开心消消乐一样,一左一右就消掉。 class Solution:def isValid(self , s: str) -> bool:# write code here# flag[(),{},[]]# for _ in range(len(s)//2):# for i in fl…

AI+零信任 | 易安联亮相首届“矩阵杯”网络安全大赛

6月26日, 首届“矩阵杯”网络安全大赛 在青岛国际会议中心举行。大赛由360数字安全、华云安主办,赛宁网安、永信至诚、红客社区协办,致力于推动提升全民网络安全意识、发现顶尖安全人才、鼓励技术创新发展,推动安全行业共建共享…

可溶性聚四氟乙烯离子交换柱PFA层析柱微柱一体成型

PFA微柱,也叫PFA层析柱、PFA离子交换柱等,主要用于地质同位素超净化、痕量、超痕量、微量元素分析实验室。 规格参考:1.5ml、15ml、30ml等。 其主要特性有: 1、PFA层析柱(微柱)专为离子交换设计&#xff…

【Python特征工程系列】编码:非数值型数据(字符型)转化为数值型数据(案例+源码)

这是我的第310篇原创文章。 一、引言 前面我们使用的案例的数据无论是特征还是标签都是数值型数据,但是在平时工作中我们的数据往往含有非数值型特征(object,比如文本字符类型的),这时候我们就需要对这类数据进行编码…

Redis 缓存一致性

Redis 业务结构 流程图 缓存一致性 Redis 和 MySQL 中数据保持一致 双检加锁策略 主要用于解决多线程环境下的并发问题,确保在高并发场景下对共享资源的访问是互斥的,避免因竞争条件导致的不一致状态 public User findUserById(Integer id) {User user …

金航标和萨科微公司发展历程

金航标kinghelm(www.kinghelm.com.cn)和萨科微slkor总经理宋仕强介绍公司发展发展历程时说,2015年萨科微与韩国延世大学团队当年萨科微碳化硅功率器件、SiC MOS、SiC SBD成功量产,2016年萨科微在中国大陆成功注册“Slkor”商标&am…

Build with Claude:价值 3 万美元 API 积分

只要在 6 月 26 日至 7 月 10 日创建一个基于 Anthropic API 的应用,并在这里提交,前三名可瓜分 3 万美元的 Anthropic 积分。

国企:中国电信天翼物联 2025届实习生招聘 二

5G解决方案工程师(南京实习生) 应聘资格要求 岗位职责 负责5G确定专网在工业、能源行业解决方案设计。 专业、能力要求 通信相关专业,有社团组织经验。 报名地址https://young.yingjiesheng.com/xyzlogin?ctmid=ac22e6c2-8b55-41ab-86c1-f530d5cb9218&ehirejobid=1558…

LeetCode 算法:验证二叉搜索树 c++

原题链接🔗:验证二叉搜索树 难度:中等⭐️⭐️ 题目 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左 子树 只包含 小于 当前节点的数。节点的右子树只包含 大于…

202486读书笔记|《格里格外》——活在当下,享受当下

202486读书笔记|《格里格外》——活在当下,享受当下 《格里格外》天然绘著,看的作者的上一本书是《生活蒙太奇》,生活里或遇见,或想象的画面,定格那一刻,让景色时间都有了更丰富的意义。 感动又欣喜&#…

存储故障导致Oracle 19c 数据文件处于recover状态的恢复案例

1.背景 某次平台分布式存储故障,导致数据库出现ORA-00376、ORA-01110数据文件不可读报错,本文将整个恢复过程进行整理记录。 2.报错信息 在进行租户数据库打开操作时,出现了如下报错: ORA-00376: file 17 cannot be read at t…

【项目实训】前端页面初探索(前期探索)

前期&#xff0c;由于没有确定页面展示形式&#xff0c;于是进行了很多探索 首先安装element-ui 导入elemnt-plus 添加use: 设置一个全局样式 编写导航栏 <el-menu:default-active"activeIndex"class"el-menu-demo"background-color"#95d475&quo…