PHP多线程pthreads踩坑记

最近由于项目需求,对配资订单需要间隔自动扫描(例如5s或者10s的时间间隔),筛选出未结算的订单所对应的股票代码,然后去拉取最新的股票数据,然后再综合各项约束筛选出要结算的订单,然后暂时设定这些订单为结算中状态(以防后续的结算任务请求和当前的结算任务冲突),然后进行订单结算,然后再释放订单的结算状态。

方案是这么设想的,但问题是如果有很多不同的股票代码需要同时拉取最新数据,又要同时保持5s的刷新频率,如果仅仅用单线程,很可能第一个结算任务过了5s甚至10s都还没有完成,但第二甚至第三个任务又启动起来了,这一方面有可能造成数据冲突,另一方面就是结算速度太慢了不仅影响体验而且可能造成进程数越来越多服务器到最后卡死。如果同时一次性将各个不同的股票代码组合起来,统一一次性去拉取最新的股票数据也是可行的一个方式,但如果股票代码多,对应的需要结算的订单多还是会出现服务器卡死的情况。

所以,我们自然会考虑多线程或者多进程,但多进程占用资源比较多,如果进程数比较多的话同样容易使机器变得卡死,多线程理论上也会有这样的问题,但是毕竟比进程轻量许多,所以,就想到使用多线程来做订单的并行结算可能比较合适。

但php本身是不支持多线程的,需要安装扩展,而安装pthreads扩展需要zts版本的php,在linux系统里需要自己重新编译php源代码并带上 –enable-maintainer-zts选项。

然而环境搭好以后你以为就可以轻松地进行php多线程变成了吗?too young. 有些系统的函数在zts版本的php下可能会执行不成功,而且没有任何报错,会被直接忽略,所以你也不好调试;而多线程的代码调试起来难度本身又更大。所以

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值