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过多的上下文切换开销,占用过多的内存。
现在还有协程的概念,可惜没看懂