PHP是单线程还是多线程?

PHP是单线程还是多线程?

大家好,又见面了,我是全栈君。

PHP 从设计之初到流行起来都没有出现明显需要用多线程才能解决的需求。某些需要用到多线程的地方也有相应的解决方案和替代方案。多线程并不总是比单线程优,多线程可能会引入其他问题(例如:两个线程同时调用一个类里的同一个方法时,可能出现死锁的情况)。

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

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112150.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • hibernate.hbm2ddl.auto=update不能自动生成表结构[通俗易懂]

    在写上篇文章《spring整合springmvc和hibernate》的时候,曾遇到一个问题说是表t_user不存在,也就是说hibernate并没有自动生成表结构,hibernate.hbm2dd

    2022年2月16日
    44
  • HTML转word_讯飞语记怎么变成word文档

    HTML转word_讯飞语记怎么变成word文档HTML转word背景介绍1.使用POI进行转化1.1思路1.2代码示例1.3思考2.使用jacob进行转化2.1思路2.2代码示例2.3思考3.总结背景介绍业务:将平台中尽调笔记(富文本)以word形式导出。1.使用POI进行转化依赖jarpoi-3.17.jarpoi-excelant-3.17.jarpoi-ooxml-3.17.jarpoi-ooxml-…

    2022年10月12日
    2
  • leetcode 两数相加_leetcode数组交集

    leetcode 两数相加_leetcode数组交集原题链接给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9

    2022年8月8日
    8
  • mysql decimal 实现_mysql decimal数据类型转换的实现示例

    mysql decimal 实现_mysql decimal数据类型转换的实现示例mysqldecimal数据类型转换的实现示例发布时间:2021-02-1408:40:00来源:亿速云阅读:85作者:小新小编给大家分享一下mysqldecimal数据类型转换的实现示例,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!最近在工作遇到数据库中存的数据类型是:decimal(14,4)遇到的问题是:当我使用python读取到内存中时,总是带着decimal…

    2022年7月17日
    17
  • linux系统docker安装rabbitmq

    linux系统docker安装rabbitmq安装rabbitmq比较简单1.下载镜像dockerpullrabbitmq:managementrabbitmq:management含有web模块下载完成:2.运行镜像启动镜像dockerrun-d–hostnamedev-scrm–namerabbit-eRABBITMQ_DEFAULT_USER=rabbit-eRABBITMQ_DEFAULT_PASS=rabbit-p15672:15672-p5672:5672rabbitmq:m

    2022年5月24日
    49
  • 如何获取窗口句柄「建议收藏」

    如何获取窗口句柄「建议收藏」1、使用FindWindow函数获取窗口句柄2、获取所有顶层窗口以及它们的子窗口使用EnumWindows和EnumChildWindows函数以及相对的回调函数EnumWindowsProc和EnumChildWindowsProc获取所有顶层窗口以及它们的子窗口3、使用GetDesktopWindow和GetNextWindow函数得到所有的子窗口…

    2022年7月21日
    15

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号