用php怎样做多线程的方法

[复制链接]
查看11 | 回复8 | 2021-1-27 06:22:51 | 显示全部楼层 |阅读模式
具体需求是这样的:
客户这边弄来一批电信流量卡,电信只提供查询跟停复机的接口,需要我这边不断的查询这批卡剩余流量,一到阀值就给这张卡停机。
最简单的思路,一直while(true),一张张卡来查询,有问题了就申请停机。这样的问题一方面是php会一下子占用了大量的服务器资源,而且不稳定,一旦出错,就会影响整批卡的查询。
所以现在想着最好就是像JAVA这样用多线程,每张卡的查询停机操作用一个新线程去做,再加一个监听线程,可以了解哪张卡查询出问题。因为没做过,所以搜了一下pcntl_fork,拿捏不准他能否实现我的要求。
另外也求大牛们提供一下思路跟关键词,感谢
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:22:51 | 显示全部楼层
1、多线程并不能缓解运行压力,该做的事情一样都没有少做
2、子线程是在父线程(或其他子线程)的缝隙中运行的,这种见缝插针的工作方式只是为了提高cpu的利用率。也就是cpu的负担更重了
3、你只有一个查询接口,而查询接口在任何瞬间是会对一个查询请求做出响应
回复

使用道具 举报

千问 | 2021-1-27 06:22:51 | 显示全部楼层
感谢版主回复,所以你建议的是还是简单点,逐一查询处理,然后循环。多线程对这种帮助不大是吗?
回复

使用道具 举报

千问 | 2021-1-27 06:22:51 | 显示全部楼层
是的
不过你若能告诉我,你是如何访问查询接口的,或许还可能有更多当然建议
回复

使用道具 举报

千问 | 2021-1-27 06:22:51 | 显示全部楼层
那边就提供一个webservice,性能跟并发数都不详。
以下是wsdl,请参考:http://101.95.48.192:8080/tsp-api/services/TspService?wsdl
回复

使用道具 举报

千问 | 2021-1-27 06:22:51 | 显示全部楼层
我这边访问用curl直接postjson数据过去就行了,如果要用soapclient应该也可以,还没试。
回复

使用道具 举报

千问 | 2021-1-27 06:22:51 | 显示全部楼层
pcntl是进程吧,你用了这个还要考虑僵尸进程的问题,还要自己写信号控制。不建议
这种问题最好用Node.js了哈哈,异步响应速度巨快
回复

使用道具 举报

千问 | 2021-1-27 06:22:51 | 显示全部楼层
可以用并行的curl(curl_multi_xxxx)来充分利用资源
回复

使用道具 举报

千问 | 2021-1-27 06:22:51 | 显示全部楼层
你要查询的还是那么多,多线程查询也需要启用那么多的查询时间,并发不会有明显改善,我建议你做个简单预估算法,把剩余流量多的查询时间间隔边长,剩余流量少的查询时间变短,还可以对流量变化求一阶导数,从而去控制你的查询时间,这样会缓和很多,不然你的查询本身就很多的无效查询
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行