资料介绍
软件简介
Swow 是一个使用 PHP 和 C 编写的高性能纯协程网络通信引擎。它致力于使用最小C核心及多数PHP代码以支持PHP高性能网络编程。
协程
Swow实现了一套有史以来最完整的PHP协程模型,它全面释放了PHP的真正实力,使得开发者可以做到以往难以想象的事情。
高性能
支持每秒百万次上下文切换。且由于Swow支持纯C协程与PHP协程混合运行,两者之间仅进行C栈单栈上下文切换,且Swow的事件调度器就是纯C协程,因此大部分协程切换都是单栈切换,其切换速度远超C + PHP的双栈切换。
高可控
现在协程可以使得PHP虚拟机像一个迷你操作系统一样,其中运行的协程近似于操作系统的进程/线程,开发者能够以超细粒度任意操控这些协程,如查看所有协程的运行状态、attach进入协程、单步调试跟踪、查看协程栈乃至每个栈帧、查看或修改协程内变量、中断协程或杀死协程等。
基于这样的可控性,开发者还可以借助WatchDog组件对陷入死循环或处于IO阻塞的协程进行警报、中断、让出甚至杀死等多种处理,以避免个别协程影响到程序整体稳定性。
并且,其与进程设计哲学的契合性,也决定了协程应用的健壮性极佳。正如单个进程的崩溃不会导致整个系统的崩溃一样,单个协程的崩溃也不会导致整个进程的崩溃,并且得益于PHP强大的异常机制和资源管理能力,与协程绑定的相关资源都能被安全地释放。你无需再为未捕获的异常殚精竭力,也不要再去捕获Throwable,遇到未知的错误请Let it crash。
易兼容
无需创建协程也无需判断是否在协程环境,在Swow中,所及之处,皆为协程,打开编辑器,即刻就可以开始书写你的代码!这也意味着它将更好地兼容已有的生态,我们再也不需要为PHPUnit重写一个由协程包裹的入口。
事件驱动
Swow基于协程事件库libcat开发,libcat又基于异步事件库libuv开发,得益于此,我们拥有了经过工业级验证的事件循环驱动,并且它支持几乎所有常见操作系统。因此,Swow也是首个能在原生Windows平台运行,且通过IOCP驱动的PHP协程网络编程引擎。由于libuv遵循Proactor模型,不久后我们又可以在Linux下免费获得由新特性io_uring带来的可观性能提升。
PHP可编程性
最小C核心意味着底层不再包揽所有事务,而是仅提供最细粒度的基础接口,即扩展层不再像是一个框架(framework),而更像是库(library),这将使PHP的编程能力最大化。
且随着PHP8和JIT的到来,我们为什么还要大量使用C或是C++来完成那些PHP也能做到的工作呢?更多地使用PHP而不是C、C++,也契合了PHP内核的未来发展方向。
更强的可编程性也带来了更多的可能性。试想一下,曾经你想写一个简单的WAF程序,通过检测IP或是解析HTTP头部来实施一些鉴权操作,但当你在回调中拿到请求对象时,底层已经替你完成了整个请求的接收,庞大的HTTP报文解析或许已经损害了你的程序性能。
但现在,Swow提供的Buffer模块使得PHP可以像C一样精细地进行内存管理,结合Socket模块和一些协议解析器,它允许你掌握小到每个字节的接收和解析,或许在未来开发者完全可以使用Swow编写高性能的网关程序,一切都可以通过PHP编程的方式改变,且它们全都是内存安全的。
现代化
面向对象
Swow在面向对象的道路上和PHP的进化路线如出一辙,不管是早期的PHP或是其它有悠久历史的扩展,对于API的设计大都是面向过程的,而经过多年发展,PHP社区早已是面向对象的天下,PHP也为内建API的面向对象支持而不懈努力。面向对象使得我们可以更好地基于Swow库进行二次封装,我们可以直接继承内部类并实现PSR接口以0成本支持PSR规范,这在实际应用中让我们的程序性能得到了极大的提升。
拥抱异常
Swow在错误处理方面和PHP的改革理念也是一致的,PHP8干掉了大量的notice、warning、error,转而使用基于异常机制的Error/Exception,极大地增强了程序的健壮性(不要再让错误的程序继续运行下去)。
曾经我们要求开发者在每个IO操作后检查返回值,否则程序就可能陷入非预期的错误状态中,这样的编码方式,无异于是一种历史的倒退,干掉if ($err != null)
,拥抱异常机制,才是正确的发展道路。
而基于上述改进,我们现在能以链式调用的方式书写代码,使代码变得更加简洁且富有节奏感。
绿色增强
Swow和Opcache非常相似,两者都允许开发者在几乎不改变代码的情况下,仅通过开启扩展就能使得应用程序获得免费大量的能力提升。即保证相同的代码具有一致的输出结果,但它们在底层所运行的指令或是系统调用可能不尽相同。
因此,Swow理所当然地支持所有SAPI(CLI,FPM等)。但需要注意的是,受制于FPM的模型,你无法简单地通过开启Swow直接获得性能上的提升,但它仍能在功能上对FPM进行增强(如并发请求接口、执行异步任务等)。
此外,即使是传统的同步阻塞应用,也可以使用Swow生态下的应用组件,如使用Swow提供的Debugger工具对程序进行断点调试分析等。
线程安全
Swow支持在PHP的ZTS(Zend Thread Safety)版本下运行,即基于内存隔离的多线程支持。
这意味着它可以和parallel、pthreads等多线程扩展很好地结合使用,但Swow本身不会提供任何多线程支持。
学习成本
Swow是否又是一个全新的轮子?答案是否定的。如果你熟悉如Swoole这样的协程库,那么你几乎无需任何学习成本就可以上手Swow,反之,Swow可能更易于上手,因为它更现代化,面向对象、异常机制、纯协程、零异步回调等一切特性都只为了让你的编码更加从容优雅。
此外,如果你的项目使用了社区流行协程框架,那么它的升级成本可能仅和由PHP5升级到PHP7相当,并且你还可能因此获得20%的免费性能提升和可观的内存占用缩减。
现阶段的Swow非常适合技术先驱和极客们尝鲜,它将走在PHP异步协程技术的前沿,拥抱变化甚至引领变化。
编程理念
Swow遵循CSP的并发模型,而不是Callback模型。在实现上来说,协程是异步回调的超集,通过创建新的协程可以模拟异步回调,而反之则不行。
两个问题
Swoole/Swow对于并发网络编程支持的技术抉择终结于克服两个巨大的现实技术难题:一个是回调地狱,另一个是生态。
一个选择
PHP异步网络编程技术的奠基者Swoole早期就尝试了异步回调模型,但在实际开发中该技术常常制造出难以维护的代码,而协程技术可以解决嵌套异步回调代码可维护性极差的问题并减轻开发者的心智负担。
而选择有栈协程技术而不是无栈协程,则是为了更好地复用已有的庞大的PHP生态。在这一点上,其它已知的异步事件库都走在了与PHP原有生态更加割裂的方向上。在Swow中,我们可以完美复用大量的PHP网络设施库及基于它们开发的海量PHP包支持而无需修改任何代码。
协程思维
此外,在纯协程的编程理念中,我们不应再以异步回调的方式去思考代码实现。以实现一个有限次数的定时任务为例,我们不再应该先想到异步定时器,使用异步定时器实现我们需要借助全局变量上下文保存状态并对其计数,在执行指定次数后删除定时器,而在协程的方式下,我们只是简单地新建一个协程并for循环指定次数,每次循环通过sleep()挂起指定的时间,再执行任务。
显然协程方式的好处是代码直观且上下文信息不会丢失。异步定时器的每次执行都需要一个全新的回调堆栈,在异步混合协程的实现下,每次回调都必须创建一个新的协程,此时纯协程实现的各种好处就不言而喻了。
- 非连续数据网络通信系统设计与实现 22次下载
- 浅析基于数据加密的网络通信系统的设计与应用 16次下载
- TD-SCDMA网络通信 14次下载
- 使用JAVA编写网络通信程序 15次下载
- 内存对齐对网络通信程序的影响 12次下载
- 网络通信过程 14次下载
- 网络通信过程研究 7次下载
- 网络通信过程中的故障排除 11次下载
- 网络通信技术对教育影响 9次下载
- 网络通信平台的内存使用 17次下载
- 网络通信系统的控制技术 11次下载
- 工业网络通信技术 22次下载
- 网络通信模型 9次下载
- 嵌入式系统中网络通信模块的实现
- 最新网络通信协议手册
- YXC可编程晶振,频点156.25MHZ,3225封装,适用与AI网络通信设备 162次阅读
- 谈谈协程的那些事儿 1010次阅读
- 高性能网络框架之XDP技术解析 3206次阅读
- 详解Linux线程、线程与异步编程、协程与异步 835次阅读
- 基于NVIDIA QM8700/8790交换机与HDR网卡的InfiniBand高性能网络解决方案 3101次阅读
- 使用channel控制协程数量 1036次阅读
- 详解Netty高性能异步事件驱动的网络框架 1707次阅读
- 计算机网络通信技术的原理与通信方式分析 4700次阅读
- 高性能双CPU单板计算机的硬件框图及功能分析 5552次阅读
- OPPO推出的无网络通信技术是怎样实现的有什么样的作用 1w次阅读
- 基于RGMII接口的88E1512搭建网络通信系统 2.2w次阅读
- Python自动化运维之协程函数赋值过程 3655次阅读
- Python中的多核CPU共享数据之协程详解 6452次阅读
- 基于FPGA协处理器的汽车信息娱乐系统设计 1059次阅读
- 基于DSP的网络通信程序设计 2760次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多