登录  /  注册

php是多线程还是单线程

(*-*)浩
发布: 2019-09-18 11:42:58
原创
5581人浏览过

php从设计之初到流行起来都没有出现明显需要用多线程才能解决的需求。

php是多线程还是单线程

某些需要用到多线程的地方也有相应的解决方案和替代方案。多线程并不总是比单线程优,多线程可能会引入其他问题(例如:两个线程同时调用一个类里的同一个方法时,可能出现死锁的情况)。(推荐学习:PHP编程从入门到精通

你可以这样理解 对应一个客户的一个页面请求处理的php 是单线程处理的, 这样一来就可以自上而下的去编辑/理解代码中的业务逻辑了, 但是 php 可以同时开很多线程来处理 很多用户请求的同一个PHP , 所以 php 也可以看成是"多线程"的。

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

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

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

至于协程,只能说是一种新的程序执行流程(旧的是顺序,判断,循环),本质是也是单线程的

所以准确的说php是单线程的,一定程度上也可以看成是“多线程”!!!

PHP多线程

在默认情况下PHP是不支持多线程的,要使用多线程需要安装 扩展,目前常用的扩展有pcnlt,POSIX ,pthreads,但是用的最多的还是pthreads扩展,它通过使用参数来指定来编译PHP时的线程安全方式,使其支持多线程

在使用线程之前首先要考虑到线程的安全问题,线程安全指的是某个函数或函数库在多线程环境中被调用时,能够正确的处理多线程之间的共享变量,使得程序的功能能够正确完成

PHP实现线程安全

PHP实现线程安全主要通过 TSRM 机制,通过此机制可以对全局变量和静态变量进行隔离,并且给每个线程都复制了一份全局变量和静态变量。各个线程使用的都是主线程的一个备份。这样就避免了变量冲突,也不会发生线程安全的问题。

PHP 对多线程的封装保证了线程安全,所以开发人员就不需要在考虑读写冲突的问题了,也使得代码更加安全。不过这样做也有不好的地方,例如当子线程开始运行时,主线程便再也无法对子线程运行细节进行调整了,失去了消息传递能力

以上就是php是多线程还是单线程的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号