PHP多线程问题思考

文章引用:https://segmentfault.com/q/1010000005942449?_ea=960381

-

php自身不能够通过代码进行线程控制,但是依旧需要考虑并发问题,因为两者并没有联系。多线程只是同一时间执行多个线程任务,和并发没有直接关系。

简单的nginx+php-fpm模式:

  • 当客户端发送一个请求时,web server会通过一个php-fpm进程(这里和下文所说指的fpm进程都是fpm开启的worker进程,关于fpm的工作原理这里不再累述)去执行php代码,php代码的执行是单线程的。

  • 那么,当有多个客户端同时发送请求时(并发),web server就会为每个请求开启一个php-fpm进程去执行php代码。

  • 请求执行过后,对应的php-fpm进程被销毁,内存得以释放。

  • 而并发的问题在于,在某一时间,客户端请求让php-fpm进程数量达到了最大限制数,这个时候,新来的请求只能等待空闲的php-fpm来处理,这就是多进程同步阻塞模式的弊端,当然还有进程过多所带来的内存占用问题。这个业务瓶颈单纯从代码上难以解决时,就需要加入负载均衡了。然后还需要考虑启用和优化数据缓存。

-

看PHP社区中pthreads的流行程度就知道,PHP多线程并不是没有,只是大多数业务中,并不需要直接开多线程,而是交给server的php-fpm以多进程代替多线程。

-

扫描二维码关注公众号,回复: 4157572 查看本文章

另外一个场景:给数十上百万的小程序用户推送模板消息。这种情况下,业务分离,可以考虑用Java或者Python这种原生支持多线程的语言请求接口——反馈接口进行批量推送消息。

-

猜你喜欢

转载自blog.csdn.net/weixin_41827162/article/details/84255333