在phper在线上使用过多线程吗?
有phper在线上使用过多线程吗?
因为在项目中需要从多个url中获取结果,所以想使用多线程。。。
multi curl也有考虑过,但效果并不明显。。。
pthreads呢?有在线上使用过吗?不知稳定性如何,不敢用到线上
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
有phper在线上使用过多线程吗?
因为在项目中需要从多个url中获取结果,所以想使用多线程。。。
multi curl也有考虑过,但效果并不明显。。。
pthreads呢?有在线上使用过吗?不知稳定性如何,不敢用到线上
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(24)
另外,PHP5.5提供了yield生成器这个关键字,已经实现了协程 Coroutine的关键特性:中断执行、恢复执行。应该也能实现异步:
http://blog.csdn.net/cszhouwei/article/details/41446687
http://www.leaseweblabs.com/2014/05/how-to-use-yield-keyword-php/
有curl_mutil_*方法,你可以看看
原来就是用multicurl的,想找一下更进一步的优化方案而已
回复
这就是我说的生态圈。放眼国内的开源项目,商业项目,恐怕也找不到几个用PHP多线程的吧。据我了解的几个大公司也没有
唉,官方是提供了,但目前找不到线上在使用的项目,不敢用到线上啊。。。
像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
multi curl 是利用的IO复用,其实multi curl非常适合解决楼主的需求,也最简单方便,楼主的场景下multi curl 的IO复用要比多线程IO性能高很多
回复
这个暂时还没确认,也没找到。。。 重要的是,你有啥好办法解决这些问题?
回复
用异步
回复
Swoole用到了多线程,不过不是PHP自带的pthreads,而是自己实现的一套进程模型 http://rango.swoole.com/archives/305 Swoole作者韩天峰是腾讯的工程师。
PHP就别想多线程了,说的人很多,但真正实际上线上用的有多少?出了问题谁能解决?世面上能找到懂多线程的PHPer ?
要实现不是问题,已经有扩展了。关键是生态圈。没人懂,没人用,没有生态圈。
PHP官方不推荐在Linux上使用线程化的Apache MPM.
http://php.net/manual/zh/faq.installation.php#faq.installation.apache2
回复
类似的,也有异步发起多个数据库查询的需求: https://github.com/krakjoe/pthreads/blob/master/examples/MySQLi.php https://github.com/krakjoe/pthreads/blob/master/examples/SQLWorker.php
回复
数据库开多个连接是可以并行select的, 但是效率不会比但进程快很多,除非取出的数据是需要大量的运算的.但是运算并非php的长项.所以多线程用在数据库上并不合适.
回复
我刚才说了异步对URL请求有意义 但是对数据库看不出有多大的意义...php要去的数据量如果大到需要多线程辅助并行获取然后汇总那么应该另想它法了
回复
有时候,一些SQL查询比较耗时,通过多线程,就有可能在这些查询结束后,其他查询也完成了,这样速度就提升了.
回复
哥们,我说的是例子。。。需要请求做几个耗时的操作返回数据处理,多线程会比一个一个的获取回来要快吧?
说实话, 还是不清楚php需要线程干什么...
嗯,我就是想知道大家有没有线上使用的情况。 版本2.x了,估计改进很多。 但实际效果,只有在线上使用过的才是最真实的结果
php有个东东叫线程安全和非线程安全,这个不知道对pthreads有影响没,因为我们nginx的话,一般都是用非线程安全版本的。
没试过,能不能说说具体方法?
回复
php + rabbitmq
。。。多进程怎么交流数据。。。
用队列开多个进程来做不就避免这个问题了吗?