欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php5如何实现多线程(多个函数异步执行)?

程序员文章站 2022-06-08 08:25:39
...
我有一个网站百度贴吧云抢二楼 code by 昌维,功能大概就是在百度贴吧里面抢二楼,现在这个网站有两百多个用户使用,我原本的执行流程在 【BUG】◇15-07-26◆〖水♀贴〗把cron的代码改了改终于正常回复_bug吧 这个帖子里面说的很清楚了。大搞就是设置每分钟执行一次cron.php,然后cron.php里面是一个用户执行一次,然后把config表里面的用户id增加1,下一轮cron就是从config表里面取出那个用户id,然后执行下一个用户,不断循环,这样做的后果就是总共两百多个用户,意味着差不多三个小时(两百多分钟)才能让所有用户抢一次二楼。
我现在想做到的就是能够一轮cron里面同时执行二十个用户的抢二楼功能,这样的话就要让二十个函数同时在cron.php里面执行,这样怎么做?php可以做到吗?之前听说过一个什么pthreads类,但是这个类官方文档看不懂啊,怎么办?

回复内容:

很显然你这个并发量,pcntl_fork(也就是多进程)是很适合的,多快好省,立马能用。crontab就算了吧,直接在多进程里面写死循环吧。

当然,用gearman等等任务队列也可以,这样就很有逼格了。

当然,对这种IO密集型,你也可以用generator,作为一个PHP程序员,你的逼格已经爆表了。 你说的案例不是php本身的多线程能力啊,只是系统的cron在自己的框架内在不同时间点的调用cron.php这个文件而已。 可以多线程的,就是 pcntl_fork() 函数。

我以前用这个做了个抢沙发程序,满流弊的。 就是用pthreads扩展实现多线程,很简单的
这是我以前写的一篇简单使用该扩展的博文:
blog.xyao.org/php/497.h
不过现在新版pthreads2.0重构之后只支持php7了,要下1.0版 PHP写这样的东西并不合适,有点为难PHP了,你可以试试 Swoole扩展,Swoole: PHP的异步、并行、分布式扩展 好像可以异步执行,我没有用过。

推荐用go来写,go的routine非常适合做这种多任务并发抓取工作,同时200个用户并发去抢也轻轻松松,go会自动调度goroutine的运行。 你想多了 php并不支持多线程,但有个pcntl扩展,可以进行多进程控制。你的需求可以使用这个扩展实现,具体用法参考PHP手册。并不需要用到计划任务。 1、fork
2、gearman。并发利器。推荐用这个吧,多起几个worker nodejs or python