php 单线程还是多,php语言是单线程吗?

php语言是单线程吗?

准确说,是。

但也不是。

每个PHP文件的执行是单线程的,但是,服务器(

apache/nigix/php-fpm

)是多线程的。每次对某个PHP文件的访问服务器都会创建一个新的进程/线程,用来执行对应的PHP文件。

也就是说对于一个请求来说PHP是单线程的,但是多个请求间是并发的。

其实一般写 PHP 程序认为是单线程的就可以了。多个请求之间相互的关系就是,有些时候读写数据库,文件,session等会加锁,会导致后面的请求挂起等待前面的请求执行完才继续。

至于协程,只能说是一种新的程序执行流程(旧的是

顺序

,

判断

,

循环

),本质是也是单线程的。

建议你先看看进程,线程的概念。

php有多进程和多线程。只不过做web的话一般接触不到进程和线程的使用。php-fpm是进程。

通过使用pthreads扩展,你可以在cli用线程安全版PHP写多线程程序。

Web上面,PHP-FPM是一个多进程的FastCGI服务,master进程epoll异步接受请求并分发给worker进程处理。不建议在Web运行模式下使用pthreads多线程扩展,因为稍有不慎,就有可能让PHP-FPM的worker进程崩溃或发生错误。多进程其实是一种非常高效的服务器架构,比如20个核心的服务器开40个PHP-FPM worker进程就好,避免CPU过多的上下文切换开销,占用过多的内存。

现在还有协程的概念,可惜没看懂

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值