首页 > 其他分享 >swoole和workerman究竟分别是什么?

swoole和workerman究竟分别是什么?

时间:2023-08-01 11:48:23浏览次数:41  
标签:php swoole worker workerman 进程 PHP 究竟

众所周知,php是单进程的脚本运行模式。当然,php-fpm是多进程的,不过这个多进程,并不支持多并发。当并发高起来,多进程就显得那么的“菜鸡”。cpu的调用就会混乱不看,性能极差。(php-fpm(点击查看))

如果想在代码里,多进程开发怎么办呢?假设有这么一个需求:

查询多个数据库里订单表里的10w条数据,并且根据里面的手机号去请求接口获取归属地,最后按照归属地出一个报表统计。

传统的方式,就是查询到后,循环遍历,一个个去请求接口,最后把数据整合在一起,存起来。那么,超时就是必然的了,百分之百执行不下去。或者是分割数据,再处理,那样又会耗时更多。

最佳的方案,其实很多种。比如,使用消息队列,切分请求,最后数据合并即可。这里讲的,是今天的主角,那就是多进程开发


 

php最强大的是函数,其实有很多可以支持多进程的函数的。如proc_open。但是,这方面不是他的强项,问题很多,官方也没有在这里发力。但是,事情总得处理,市场就出现了很多解决方案。其中最火的就是swoole和workerman。

终于说到今天的主角了,那么他们分别是是什么呢?

引用官网的描述:

Swoole 是一个使用 C++ 语言编写的基于异步事件驱动和协程的并行网络通信引擎,为 PHP 提供协程高性能网络编程支持。提供了多种通信协议的网络服务器和客户端模块,可以方便快速的实现 TCP/UDP服务高性能WebWebSocket服务物联网实时通讯游戏微服务等,使 PHP 不再局限于传统的 Web 领域。

 

Workerman是一款纯PHP开发的开源高性能的PHP 应用容器。Workerman不是重复造轮子,它不是一个MVC框架,而是一个更底层更通用的服务框架,你可以用它开发tcp代理、梯子代理、做游戏服务器、邮件服务器、ftp服务器、甚至开发一个php版本的redis、php版本的数据库、php版本的nginx、php版本的php-fpm等等。Workerman可以说是PHP领域的一次创新,让开发者彻底摆脱了PHP只能做WEB的束缚。

 

说人话,其实就是:1、swoole是使用C语言实现的socket通信框架,而workerman是使用纯php实现的socket框架;2、workerman中socket是由worker进程负责的,swoole则是由主进程中的reactor线程来负责的。

swoole:

master进程

这个进程比较复杂,也是我认为最核心的进程,这是一个包含多线程的进程,分别是一个主线程和n个reactor线程(数量可以配置)。

其中,主线程用于accept新的连接,然后评估一下每个reactor线程负责维护的连接数,然后分配给数量最少的那个reactor线程,最大程度保证每个reactor线程的负载量是均衡的。

本质上讲,一旦一个socket可读或者可写了,就由reactor线程发送给worker进程或者发送会客户端。除此之外,主线程还负责对所有信号的接管,避免reactor线程收到信号的打扰中断。

说的洋气点儿就是:master进程负责了连接的accept、托管、socket的可读可写(数据的发送和接受),本质上讲,master进程负责了IO。还需要注意一点儿的是reactor线程是彻底的全异步非阻塞工作方式。

manager进程

manager进程是worker进程和taskworker进程的妈,说的洋气点儿就是manager进程fork出来了worker进程和taskworker进程,生出来了就得管,所以,manager进程得负责对worker进程和taskworker进程的抚养义务,具体包括监控它们的状态、当它们意外挂了后重新拉起一个新的进程(避免了僵尸进程)、平滑重启(就是传说中的reload)。

worker进程

worker进程是manager进程fork出来的,这个进程说白了就是搬砖干活(官方文档中屡次提到的业务代码),其实就是平时码的那些curd业务逻辑代码,懂了吧?只不过worker进程比较diao的是,这个进程可以用异步方式去工作,也可以用同步方式去工作。如果听不懂什么意思,那就先背过,先混个脸熟再说。

taskworker进程

taskworker进程(后文中称tasker进程)实际本质上也是worker进程,只不过是一种特殊的worker进程。如果你的worker进程中存在一些耗时耗力的操作,那么可以先抛给tasker进程,自己先去干别的,等tasker干完了,再由worker进程取回,非常diao。但是tasker进程只能工作在同步方式下,并不能使用异步。这就是为什么tasker进程不可以使用定时器,而worker进程可以使用定时器的原因。

简单总结混在一起说下这几种进程之间是怎么搭配起来干活的。见说来说,就是master进程就是接活儿的销售,但是具体干活则由worker进程来做,如果worker进程感觉到某些流程太繁忙复杂就可以让tasker进程来做。而manager进程就是后勤worker进程和takser进程的人力资源保障部,负责他们的生死存亡和吃喝拉撒。

 


workerman

而workerman的进程模型相对就要简单很多了,首先相对于swoole来说,workerman没有swoole中的reator线程,其次workerman没有用于处理普通业务的worker进程以及tasker进程。而workerman的话,socket是由worker进程负责的,swoole中则是由主进程中的reactor线程来负责的。而swoole在接受到数据后,可以通过自己的worker进程来处理业务(有点儿类似于fpm进程)。

workerman是一个高性能的PHP socket 服务器框架,workerman基于PHP多进程以及libevent事件轮询库,PHP开发者只要实现一两个接口,便可以开发出自己的网络应用,例如Rpc服务、聊天室服务器、手机游戏服务器等。

workerman的目标是让PHP开发者更容易的开发出基于socket的高性能的应用服务,而不用去了解PHP socket以及PHP多进程细节。 workerman本身是一个PHP多进程服务器框架,具有PHP进程管理以及socket通信的模块,所以不依赖php-fpm、nginx或者apache等这些容器便可以独立运行。

 

其实,不管是swoole还是workerman,都是对接网络层的socket编程,如果想要彻底了解清楚,还是得去学习linux网络编程,了解系统层面的多进程是如何运转的。因为不管是任何语言,最后都是请求到了系统层面的进程。北风大佬的理解真的深刻,让我受益良多。所有的编程语言它们都是调用共同的系统调用API ,应用层的拔高点,必然是网络层。网络层再继续,就是硬件通信了。学习永无止境,朋友,加油吧!!!

标签:php,swoole,worker,workerman,进程,PHP,究竟
From: https://www.cnblogs.com/itbaby/p/17596034.html

相关文章

  • 数字化转型究竟难在哪里?让我们来听听他们怎么说
    近年来,随着国际环境日趋复杂,我国经济发展的复杂性、严峻性、不确定性持续上升,所面临的内外部挑战不断增加,经济发展正由高速增长向中高速增长转换。与此同时,以数字技术为主导的新一轮科技革命在全球范围内加速演进,全面推动着社会生活、生产方式向数字化转型,数实融合成为各行各业的必......
  • 聊城高新技术企业认定究竟需要多少个专利
    聊城高新技术企业认定究竟需要多少个专利恒标知产刘经理di一种:申报高新技术企业只要1个发明专利或5个实用新型。这个说法是有明确的依据的。即高新技术企业评审标准中,主观量化考核指标中相关规定。即我们常说的打分系统中,总分100分,其中知识产权部分为30分。而知识产权部分的评分由......
  • Github一夜爆火的阿里术小册究竟有什么魅力?才能引大家趋之若鹜
    前言谈谈我的真实感受吧~程序员真的是需要将终生学习贯彻到底的职业,一旦停止学习,离被淘汰,也就不远了。金九银十跳槽季,这是一个千年不变的话题,每到这个时候,很多人都会临阵磨枪,相信不快也光。于是,大家都会搜集一些面试题。但其实,对于一些不跳槽的同学来说,真的也很有必要去研读一些大厂......
  • 基础模型自监督预训练的数据之谜:大量数据究竟是福还是祸?
    前言 在自监督预训练中,是否数据越多越好?数据增广是否始终有效?本文转载自PaperWeekly作者|诺亚方舟实验室仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。CV各大方向专栏与各个部署框架最全......
  • 宝塔php7.3安装swoole拓展问题
    宝塔选择php7.3安装swoole拓展后,发现还是不能用swoole;php-v发现默认版本是php7.4解决办法:切换默认PHP版本即可1.rm-f/usr/bin/php//删除默认的配置2.将默认版本修改成想要的版本,如:7.3ln-sf/www/server/php/73/bin/php/usr/bin/php ......
  • 微擎开发使用workerman时,使用微擎pdo_xxx提示MySQL server has gone away解决办法
    微擎开发使用workerman时,使用微擎pdo_xxx提示MySQLserverhasgoneaway解决办法#找到微擎的DB类ramework\class\db.class.phppublicfunctionreConnect($errorInfo,$params){ if(in_array($errorInfo[1],array(1317,2013))){ $this->pdo=null; $this->conne......
  • Java源码系列4——HashMap扩容时究竟对链表和红黑树做了什么?
    Photobyhippopx.com我们知道HashMap的底层是由数组,链表,红黑树组成的,在HashMap做扩容操作时,除了把数组容量扩大为原来的两倍外,还会对所有元素重新计算hash值,因为长度扩大以后,hash值也随之改变。如果是简单的Node对象,只需要重新计算下标放进去就可以了,如果是链表和红黑......
  • 一探究竟!天翼云2023MWC展区“亮”了!
    6月28日,2023MWC上海世界移动通信大会(简称“MWC上海”)在上海新国际博览中心启幕。中国电信开设“数智万融畅享未来”主题展区,从科技创新、安全筑防及服务赋能三大核心板块56项科数成就入手,全方位展示中国电信新技术、新产品以及新一代信息智能数字化解决方案。其中,中国电信天翼云......
  • 数字先锋|云上医院长什么样?宁夏固原中医医院带你一探究竟!
    卫健行业是关乎国家和民生安全的关键行业。近年来,云计算、大数据、人工智能等技术不断发展,并与医疗行业深入融合。同时,相关部门相继颁发一系列政策,进一步推动医疗行业数字化、智慧化转型,促进探索健康中国高质量发展道路。作为全/国第/一个“互联网+医疗健康”示范区,宁夏积极推动......
  • Android 小白在两年时间成为一个大牛,我究竟做了什么?
    初识Android=========“同学们,给大家介绍一下,我是你们未来一年的移动互联网开发讲师”,我在大三的时候,这是我和Android第一次交流,当时的课讲实话,我没听,一点都没有,只是知道了有个东西叫Android开发。还是和大多数人一样,做着自己喜欢的事情。我们专业并不是和移动开发相关的,这点......