php中的线程、进程和并发区别

php中的线程、进程和并发区别

https://mp.weixin.qq.com/s/Ps5w13TTmpnZx-RPWbsl1A

进程

进程是什么?进程是正在执行的程序;进程是正在计算机上执行的程序实例;进程是能分配给处理器并由处理器执行的实体。进程一般会包括指令集和系统资源集,这里的指令集是指程序代码,这里的系统资源集是指I/O、CPU、内存等。综合起来,我们也可以理解进程是具有一定独立功能的程序在关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。

在进程执行时,进程都可以被唯一的表示,由以下一些元素组成:

  • 进程描述符:进程的唯一标识符,用来和其它进程区分。在Linux中叫进程ID,在系统调用fork期间生成,只是我们通过getpid返回的不是其pid字段,而是其线程组号tgid。

  • 进程状态:我们常说的挂起、运行等状态,其表示的是当前的状态。

  • 优先级:进程间的执行调度相关,相对于其它进程而言。

  • 程序计数器:程序中即将被执行的下一条指令的地址,该地址是内核术中或用户内存空间中的内存地址。

  • 内存指针:包括程序代码和进程相关数据的指针,还有和其它进程共享内存块的指针。

  • 上下文数据:进程执行时处理器的寄存器的数据。

  • I/O状态信息:包括显式的I/O请求、分配给进程的I/O设备等

  • 记账信息:可能包括处理器时间总和、使用的时钟数总和、时间限制等

以上的这些元素都会放在一个叫做进程控制块的数据结构中。进程控制块是操作系统能够支持多进程和提供多处理的结构。当操作系统做进程切换时,它会执行两步操作,一是中断当前处理器中的进程,二是执行下一个进程。不管是中断还是执行,进程控制块中的程序计数器、上下文数据和进程状态都会发生变化。当进程中断时,操作系统会把程序计数器和处理器寄存器(对应进程控制块中的上下文数据)保存到进程控制块中的相应位置,进程状态也会有所变化,可能进入阻塞状态,也有可能进入就绪态。当执行下一个进程时,操作系统按规则将下一个进程设置为运行态,并加载即将要执行进程的程序上下文数据和程序计数器等。

线程

进程有两个特性部分:资源所有权和调度执行。资源所有权是指进程包括了进程运行所需要的内存空间、I/O等资源。调度执行是指进程执行过程中间的执行路径,或者说程序的指令执行流。这两个特性部分是可以分开的,分开后,拥有资料所有权的通常称为进程,拥有执行代码的可分派部分的被称之为线程或轻量级进程。

线程有“执行的线索”的意思在里面,而进程在多线程环境中被定义为资源所有者,其还是会存储进程的进程控制块。线程的结构与进程不同,每个线程包括:

  • 线程状态: 线程当前的状态。

  • 一个执行栈

  • 私有的数据区: 用于每个线程局部变量的静态存储空间

  • 寄存器集: 存储处理器的一些状态

     

每个进程都有一个进程控制块和用户地址空间,每个线程都有一个独立的栈和独立的控制块,都有自己一个独立执行上下文。其结构如图8.1所示。

php中的线程、进程和并发区别

线程在执行过程中与进程有一些不同。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在于进程之中,由进程提供多个线程执行控制。从逻辑角度来看,多线程的意义在于一个进程中,有多个执行部分可以同时执行。此时,进程本身不是基本运行单位,而是线程的容器。

线程较之进程,其优势在于一个快,不管是创建新的线程还是终止一个线程;不管是线程间的切换还是线程间共享数据或通信,其速度与进程相比都有较大的优势。

并发及并行

并发又称共行,是指能处理多个同时性活动的能力,并发事件之间不一定要同一时刻发生。比如,现代计算机系统可在同一段时间内以进程的形式将多个程序加载到存储器中,并借由处理器的时分复用,以在一个处理器上表现出同时运行的感觉。

并行是指同时发生的两个并发事件,具有并发的含义,而并发则不一定并行。

并发和并行的区别就是一个处理器同时处理多个任务和多个处理器或者是多核的处理器同时处理多个不同的任务。前者是逻辑上的同时发生(simultaneous),而后者是物理上的同时发生。

PHP的各种并发模型

参考资料

《操作系统精髓与设计原理》

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/112721.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Apache Web服务器安全配置全攻略[通俗易懂]

    Apache Web服务器安全配置全攻略[通俗易懂]作为最流行的Web服务器,ApacheServer提供了较好的安全特性,使其能够应对可能的安全威胁和信息泄漏。   Apache服务器的安全特性  1、采用选择性访问控制和强制性访问控制的安全策略  从Apache或Web的角度来讲,选择性访问控制DAC(DiscretionaryAccessControl)仍是基于用户名和密码的,强制性访问控制MAC(Mand

    2022年10月28日
  • 虚拟机ifconfig或ip addr不显示ip地址「建议收藏」

    虚拟机ifconfig或ip addr不显示ip地址「建议收藏」虚拟机ifconfig或ipaddr不显示ip地址报错图片:一直查不到ip地址,有重新启动很多次解决方法(1)命令查看配置文件:vi/etc/sysconfig/network-scripts/ifcfg-ens33ens33注意看这个修改的文件后缀把ONBOOT的状态no改为yes然后重启,应该就没问题了。(2):还有一种可能是因为虚拟网卡没有正常连接,解决方法是开启虚拟网卡的服务:打开任务管理器,选择服务标签,为了保险,开启所有的和vmware有关的服务检

  • JEECG整合SpringSession

    JEECG整合SpringSession

  • C#结合数据库开发通讯录管理系统

    通讯录管理系统,数据库关系模式为:账户(账户名,登录密码,头像),联系人(ID,姓名,电话,QQ,Email)。主要功能包括:注册,登录,注销账号,修改账户名以及密码,更换头像,以及对联系人的增删改查。工具:VisualStudio2015,sqlserver2014数据库关系表:Account:…

  • 10 种机器学习算法的要点(附 Python 和 R 代码)「建议收藏」

    10 种机器学习算法的要点(附 Python 和 R 代码)「建议收藏」前言谷歌董事长施密特曾说过:虽然谷歌的无人驾驶汽车和机器人受到了许多媒体关注,但是这家公司真正的未来在于机器学习,一种让计算机更聪明、更个性化的技术。也许我们生活在人类历史上最关键的时期:从使用大

  • 基于Java开发的testNG接口自动化测试

    基于Java开发的testNG接口自动化测试1.TestNG简介TestNG是一个开源的测试框架与Junit的发行顺序:Junit3->TestNG->Junit4,TestNG的灵感来自于Junit3,在TestNG推出不久后,Junit借鉴了其中很多概念,也推出了差不多四年以来首个发行版本Junit4。所以,TestNG跟JUnit4很像,但它并不是JUnit的扩展,它的创建目的是超越Junit。TestNG具有更强…

    2022年10月23日

发表回复

您的电子邮箱地址不会被公开。

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