在phper在线上使用过多线程吗?

发布于 2021-11-26 22:33:54 字数 164 浏览 703 评论 24

有phper在线上使用过多线程吗?

因为在项目中需要从多个url中获取结果,所以想使用多线程。。。

multi curl也有考虑过,但效果并不明显。。。


pthreads呢?有在线上使用过吗?不知稳定性如何,不敢用到线上

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(24

可是我不能没有你 2021-12-01 02:07:28

另外,PHP5.5提供了yield生成器这个关键字,已经实现了协程 Coroutine的关键特性:中断执行、恢复执行。应该也能实现异步:
http://blog.csdn.net/cszhouwei/article/details/41446687
http://www.leaseweblabs.com/2014/05/how-to-use-yield-keyword-php/

猫九 2021-12-01 02:07:27

有curl_mutil_*方法,你可以看看

泛滥成性 2021-12-01 02:07:24

原来就是用multicurl的,想找一下更进一步的优化方案而已

苍暮颜 2021-12-01 02:07:23

回复
这就是我说的生态圈。放眼国内的开源项目,商业项目,恐怕也找不到几个用PHP多线程的吧。据我了解的几个大公司也没有

多情癖 2021-12-01 02:07:23

唉,官方是提供了,但目前找不到线上在使用的项目,不敢用到线上啊。。。

奢望 2021-12-01 02:07:23

像Linux上PHP的进程控制库pcntl和事件驱动库libevent用的人也不多,但是WorkerMan项目还是这样开发出来了.楼主可以自己写个测试脚本,用pthreads多线程异步发起多个数据库查询和URL请求,用siege连续测试2小时,看看Apache/PHP-FPM的稳定性和运行情况后再做出评估:

siege -c10 -t2H  http://127.0.0.1/pthreads.php

-c10表示并发10个, -t120M表示连续测试120分钟.

https://github.com/krakjoe/pthreads/blob/master/examples/MySQLi.php
https://github.com/krakjoe/pthreads/blob/master/examples/SQLWorker.php

https://github.com/krakjoe/pthreads/blob/master/examples/SimpleWebRequest.php

剑心龙吟 2021-12-01 02:07:23

multi curl 是利用的IO复用,其实multi curl非常适合解决楼主的需求,也最简单方便,楼主的场景下multi curl 的IO复用要比多线程IO性能高很多

泪冰清 2021-12-01 02:07:22

回复
这个暂时还没确认,也没找到。。。 重要的是,你有啥好办法解决这些问题?

卸妝后依然美 2021-12-01 02:07:21

回复
用异步

倾城泪 2021-12-01 02:07:18

回复
Swoole用到了多线程,不过不是PHP自带的pthreads,而是自己实现的一套进程模型 http://rango.swoole.com/archives/305 Swoole作者韩天峰是腾讯的工程师。

贱贱哒 2021-12-01 02:07:17

    PHP就别想多线程了,说的人很多,但真正实际上线上用的有多少?出了问题谁能解决?世面上能找到懂多线程的PHPer ?

    要实现不是问题,已经有扩展了。关键是生态圈。没人懂,没人用,没有生态圈。

眼泪淡了忧伤 2021-12-01 02:07:02

PHP官方不推荐在Linux上使用线程化的Apache MPM.

http://php.net/manual/zh/faq.installation.php#faq.installation.apache2

PHP 是粘合剂。它将几十种第三方的库粘合到一起来创建很酷的 web 应用,并通过很直观且易于学习的语言界面使其看上去好像一个整体。PHP 的灵活与强大依赖于底层平台的稳定与耐用。起码需要将一个可运作的操作系统,一个可运作的 web 服务器以及可运作的第三方库粘合起来。其中任何一方不运作了,PHP 都需要有方法来识别出问题并且快速解决。如果没有完全独立的执行线程,完全独立的内存单元和稳定的空间对付每个请求,那底层架构就太复杂以至于不稳定因素更容易进入到 PHP 系统中。

韬韬不绝 2021-12-01 02:06:52

回复
类似的,也有异步发起多个数据库查询的需求: https://github.com/krakjoe/pthreads/blob/master/examples/MySQLi.php https://github.com/krakjoe/pthreads/blob/master/examples/SQLWorker.php

羁拥 2021-12-01 02:06:42

回复
数据库开多个连接是可以并行select的, 但是效率不会比但进程快很多,除非取出的数据是需要大量的运算的.但是运算并非php的长项.所以多线程用在数据库上并不合适.

左岸枫 2021-12-01 02:06:24

回复
我刚才说了异步对URL请求有意义 但是对数据库看不出有多大的意义...php要去的数据量如果大到需要多线程辅助并行获取然后汇总那么应该另想它法了

尐偏执 2021-12-01 02:04:18

回复
有时候,一些SQL查询比较耗时,通过多线程,就有可能在这些查询结束后,其他查询也完成了,这样速度就提升了.

囚你心 2021-12-01 01:55:33

回复
哥们,我说的是例子。。。需要请求做几个耗时的操作返回数据处理,多线程会比一个一个的获取回来要快吧?

等你爱我 2021-11-30 23:09:49

说实话, 还是不清楚php需要线程干什么...

贱贱哒 2021-11-30 22:03:31

嗯,我就是想知道大家有没有线上使用的情况。 版本2.x了,估计改进很多。 但实际效果,只有在线上使用过的才是最真实的结果

羁拥 2021-11-30 20:36:00

php有个东东叫线程安全和非线程安全,这个不知道对pthreads有影响没,因为我们nginx的话,一般都是用非线程安全版本的。

醉生梦死 2021-11-30 20:01:12

没试过,能不能说说具体方法?

凡尘雨 2021-11-30 19:52:11

回复
php + rabbitmq

韬韬不绝 2021-11-30 07:01:33

。。。多进程怎么交流数据。。。

少女净妖师 2021-11-29 15:27:21

用队列开多个进程来做不就避免这个问题了吗?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文