PHP 程序如何实现多进程?

2023-04-02 奥古斯宏

PHP多进程的概念最近很火,因为有很多框架和项目都是基于CLI来运行。其实对于于PHP-FPM来说,PHP一直都是多进程运行的,任何的PHP代码,只要使用传统的建站方式运行,都是多进程的。但这显然不是我们所关注的。

其他编程语言的运行方式

最近看来,有很多语言都可以用来开发Web后端,他们的运行方式大多是基于类库和框架,在命令行中运行,监听一个TCP端口,处理基本的http请求,然后进入到框架,分发至不同的业务代码。也正是这些语言推动了docker的发展和severless的发展,毕竟他们的运维确实要麻烦些,要处理监听、重启、连接等等。这些在PHP-FPM中并不存在,在PHP中只要把代码更新上去就行了。

这些框架有很多,也很流行,比如:

Java web框架:

1. Spring Framework:一个非常流行的基于Java语言的web应用框架,提供了强大的IoC容器、AOP框架和一系列集成的API,简化了web应用开发流程。

2. Struts:最早的MVC框架之一,提供了全面的控制层、验证、数据绑定方案。

3. Hibernate:一个十分流行的ORM框架,提供了对象关系映射、HQL查询、事务处理等功能。

4. Play Framework:一款轻量级、高效的Web框架,基于Java语言和Scala语言,提供了优秀的基础设施和强大的开发工具。

版权声明:本文由phpreturn.com(PHP武器库官网)原创和首发,所有权利归phpreturn(PHP武器库)所有,本站允许任何形式的转载/引用文章,但必须同时注明出处。

Go web框架:

1. Gin:一个高性能的Web框架,基于Go语言,非常适合构建RESTful API和微服务。

2. Beego:一个MVC风格的Web框架,基于Go语言,提供了很多有用的功能和工具,例如ORM、Session管理、国际化支持。

3. Echo:一个灵活、高性能的Web框架,基于Go语言,支持中间件、路由、模板、静态文件服务等功能。

Python web框架:

1. Django:一个非常流行的全栈Web框架,提供了ORM、模板引擎、路由系统等强大的构建Web应用的功能。

2. Flask:一个轻量级的Web框架,基于Python语言,提供了简单、易用的API,可以快速构建Web应用。

3. Pyramid:一个灵活的Web框架,基于Python语言,支持多种视图风格和数据库访问方式,提供了可扩展的插件机制。

版权声明:本文由phpreturn.com(PHP武器库官网)原创和首发,所有权利归phpreturn(PHP武器库)所有,本站允许任何形式的转载/引用文章,但必须同时注明出处。

Node.js web框架:

1. Express:一个基于Node.js的MVC框架,提供了路由、中间件、模板和静态文件服务等常用功能,可以高效构建Web应用。

2. Koa:一个轻量级、灵活的Web框架,基于Node.js,提供了异步中间件、错误处理、请求响应代理等功能,非常适合构建高性能Web应用。

3. Nest.js:一个全新的Node.js框架,基于TypeScript语言,提供了模块化、DI、MVC结构、WebSockets等功能,支持多种开发风格。

“高性能框架”相比PHP-FPM的优势

PHP-FPM本身是很强的,以至于PHP对于docker等技术的需求很弱,有个ftp就足够了。但是PHP-FPM的性能在设计上也是有不足的,当开启的进程很多时,但CPU的核心数不变,会导致来回的切换进程,检查是否空闲或需要处理,这就导致了CPU大量的浪费。

所以PHP也有很多“高性能”框架,同其他语言的框架一样,他们能够完全利用Linux的高性能特性,利用多进程、协程、EventLoop等,实现高性能的业务开发。

PHP如何实现多进程呢?

其实主要有两种做法:

版权声明:本文由phpreturn.com(PHP武器库官网)原创和首发,所有权利归phpreturn(PHP武器库)所有,本站允许任何形式的转载/引用文章,但必须同时注明出处。

1.使用pcntl扩展实现可编程的进程创建和管理

2.使用exec等函数,让操作系统再执行一次命令

第一种做法还是比较正统的可靠的做法,一个健全的系统,连进程管理都做不到,也说不过去。网上也有一些资料。

但其实第二种也是一种不错的讨巧的做法,我就写过这样的代码,利用popen函数,执行多次命令,通过命令行的参数传递是第几个进程和其他数据,数据共享用缓存去实现,这样的好处是在windows上也能实现多进程。

更可靠的PHP多进程方案

其实PHP已经有很多更可靠的多进程方案,比如:

1. Laravel Horizon

版权声明:本文由phpreturn.com(PHP武器库官网)原创和首发,所有权利归phpreturn(PHP武器库)所有,本站允许任何形式的转载/引用文章,但必须同时注明出处。

2. Symfony Process Component

3. ReactPHP

4. Swoole Framework

5. Amp(PHP 异步多进程框架)

6. Workerman

7. PHP-PM(PHP Process Manager)

版权声明:本文由phpreturn.com(PHP武器库官网)原创和首发,所有权利归phpreturn(PHP武器库)所有,本站允许任何形式的转载/引用文章,但必须同时注明出处。

8. pthreads

9. Hoa\Websocket

10. PHP Forking(基于 Pcntl 模块的多进程框架)

以上既有多进程的异步队列方案,比如Laravel Horizon,也有能够进行异步的命令运行的组件,比如S页面佛呢Process Component ,也有PHP的多线程扩展:pthreads,其他的都是可以直接进行网络编程的框架。

总结

目前PHP在多进程方面有很多成熟的开源框架,实现多进程是轻而易举的事,也是很有趣的事,这赋予了PHP实现可靠地进程编程能力,也能够让PHP可以进行基本的网络编程,你可以写一个DHT spider,可以做一个代理服务器,可以做一个端口防火墙,可以做一个端口流量监控和调控程序等等。值得我们去学习。


版权声明:本文由phpreturn.com(PHP武器库官网)原创和首发,所有权利归phpreturn(PHP武器库)所有,本站允许任何形式的转载/引用文章,但必须同时注明出处。


最近浏览
IP用户:85.208.*.*
1 小时前 Semrush Bot
IP用户:44.222.*.*
1 小时前 ccBot crawler
IP用户:116.179.*.*
1 天前 Baidu Spider
IP用户:119.114.*.*
2 天前 Firefox Windows 7
IP用户:60.188.*.*
2 天前 Generic Bot
IP用户:36.26.*.*
2 天前 Sogou Explorer Windows 7
IP用户:101.67.*.*
4 天前 Generic Bot
IP用户:121.226.*.*
4 天前 Sogou Explorer Windows 7
IP用户:40.77.*.*
4 天前 BingBot
IP用户:110.88.*.*
5 天前 Internet Explorer Windows 7
IP用户:175.0.*.*
5 天前 Microsoft Edge Windows 10
IP用户:113.217.*.*
5 天前
累计浏览次数:813
评论
点击登录
phpreturn,PHP武器库,专注PHP领域的项目和资讯,收录和介绍PHP相关项目。
最近浏览 点击登录
累计浏览次数:128672
一周浏览次数:2365
今日浏览次数:86

本站所有权利归 phpreturn.com 所有

举报/反馈/投稿邮箱:phpreturn@ulthon.com

鲁ICP备19027671号-2