首页 > 系统相关 >多线程和多进程的区别与相同

多线程和多进程的区别与相同

时间:2024-12-06 19:30:48浏览次数:5  
标签:状态 执行 操作系统 区别 调度 线程 进程 多线程

一:进程的定义

  进程是操作系统分配资源的基本单位,每个进程之间的资源互不相通,不进行资源共享(除非使用管道或者其他共享资源的手段),每个进程都有独立的PCB(操作系统用于管理进程的数据结构,包含进程的基本信息,如进程ID、状态、优先级、程序计数器、寄存器集合、进程的内存管理信息等),每个子进程都有他的父进程,子进程结束以后,父进程负责管理子进程的资源回收,通常情况下,一个进程的崩溃不会影响另一个进程(进程之间资源的独立性)。

进程的几种状态:

  1. 就绪(Ready)状态

    进程已准备好执行,等待被调度器选中并分配CPU时间。在多任务操作系统中,多个进程可能同时处于就绪状态,等待CPU资源。
  2. 运行(Running)状态

    进程正在获得CPU时间并执行。在单核CPU上,任何时刻只有一个进程处于运行状态;在多核CPU上,可以有多个进程同时处于运行状态。
  3. 阻塞(Blocked)状态

    进程因为等待某个事件(如I/O操作、获取信号量等)而暂时停止执行。在等待的事件完成之前,进程不能继续执行。
  4. 等待(Waiting)状态

    进程因为等待某个条件发生而挂起,不会对CPU资源进行竞争。这种状态通常用于同步和通信,进程需要等待特定的事件或信号。
  5. 挂起(Suspended)状态

    进程被操作系统挂起,不能执行。挂起状态可以是用户请求的,也可以是操作系统为了资源管理而自动进行的。挂起的进程可以被恢复到就绪状态。

 有什么类型的进程,以及产生原因

  1. 用户进程

    这些进程执行用户级别的任务,如运行应用程序、处理用户输入等。它们通常直接与用户交互。
  2.  守护进程(Daemon)
    守护进程是系统进程,它们在后台运行,通常独立于控制终端,周期性地执行某些任务,如Web服务器和数据库服务器。它们被设计为在系统启动时自动启动,并在整个系统运行期间保持活动状态,无需用户干预。
  3.  僵尸进程(Zombie Process)
    僵尸进程产生于子进程结束后,父进程没有调用wait()waitpid()来获取子进程的退出状态。在这种情况下,子进程的进程描述符(包括进程号PID、退出状态等)仍然保存在系统中。危害:僵尸进程会占用系统资源,尤其是进程表中的条目。如果系统中存在大量的僵尸进程,可能会导致进程表耗尽,从而无法创建新的进程。
  4. 孤儿进程(Orphan Process)

    孤儿进程是指父进程结束后仍在运行的子进程。当一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程就成为孤儿进程。孤儿进程会被操作系统的init进程(PID为1)收养,并由init进程完成状态收集工作。危害:孤儿进程本身不会对系统造成危害,因为它们最终会被init进程处理。但是,如果孤儿进程非常多,它们可能会间接增加系统负担,因为init进程需要为它们做额外的管理工作。

二:线程的定义

线程是系统运算和调度的最小单位,它是存在于进程当中的

线程的特点:

  1. 轻量级

    线程相比于进程是更轻量级的实体,它们共享进程的资源,如内存空间和文件描述符,但拥有自己的程序计数器、寄存器集合和堆栈。
  2. 并发性

    在多线程程序中,多个线程可以并发执行,提高了程序的执行效率和响应速度。
  3. 资源共享

    同一进程内的线程可以共享进程的资源,如内存空间和文件句柄,这使得线程间通信和数据共享更加容易。
  4. 独立调度

    每个线程都有自己的执行栈和程序计数器,可以被独立调度和分派到不同的处理器上执行。
  5. 上下文切换

    线程的上下文切换比进程的上下文切换要快,因为它们共享许多资源,不需要重新加载内存映射等。

进程与线程的相同点和不同点 

相同点

  1. 调度

    进程和线程都可以被操作系统调度执行。
  2. 并发性

    进程和线程都可以实现并发执行,提高程序的效率。
  3. 系统调用

    进程和线程都可以进行系统调用,请求操作系统的服务。

不同点

  1. 资源拥有

    • 进程:拥有独立的地址空间,一个进程的资源不与其他进程共享。
    • 线程:同一进程内的线程共享进程的地址空间和资源。
  2. 创建和管理开销

    • 进程:创建和管理进程的开销相对较大,因为需要为每个进程分配独立的资源。
    • 线程:创建和管理线程的开销较小,因为它们可以共享进程的资源。
  3. 通信方式

    • 进程:进程间通信(IPC)需要特定的机制,如管道、消息队列、共享内存等。
    • 线程:线程间可以直接读写共享变量来进行通信,不需要特定的IPC机制。
  4. 独立性

    • 进程:进程是独立运行的实体,一个进程的崩溃不会直接影响到其他进程。
    • 线程:线程之间是相互依赖的,一个线程的崩溃可能会导致整个进程的崩溃。
  5. 上下文切换

    • 进程:进程间的上下文切换开销较大,因为涉及到虚拟地址空间的切换。
    • 线程:线程间的上下文切换开销较小,因为它们共享相同的地址空间。
  6. 执行单元

    • 进程:进程是操作系统进行资源分配和调度的基本单位。
    • 线程:线程是操作系统能够进行运算调度的最小单位。
  7. 调度优先级

    • 进程:调度是基于进程进行的,每个进程有独立的调度优先级。
    • 线程:线程可以有自己的调度优先级,也可以与进程共享优先级。
  8. 生命周期

    • 进程:进程的生命周期从创建开始,到执行完成或被终止结束。
    • 线程:线程的生命周期从创建开始,到执行完成、被终止或其所属进程结束

标签:状态,执行,操作系统,区别,调度,线程,进程,多线程
From: https://blog.csdn.net/weixin_74994990/article/details/144223182

相关文章

  • 关于PHP this 和 self 调用类方法的区别
    看以下代码classParentClass{publicfunctionparentMethod(){print_r(get_class($this));//输出ChildClass$this->get();//这时候的this是ChildClass的对象输出:子类的方法被调用}publicfunctionget(){echo"父类的方法......
  • 【Linux】多线程(自旋锁、读写锁)
     ......
  • 官网和域名的区别是什么?
    官网和域名的区别是什么?咋网站建设的过程中,官网和域名是两个非常重要的概念,下面是聚名网关于官网和域名区别的详细介绍。官网指的是一个企业、品牌或个人的官方网站。它是一个集成了各种信息和功能的平台,在向访问者提供有关该企业或个人的详细信息。官网通常包含公司的介绍......
  • shell脚本的三种执行方式和区别
    执行方式直接使用绝对,相对路径这种是平时我们最常用的方法,例如:./test.sh/home/thammer/test.sh甚至PATH目录里面的,如系统自带的命令,也就是无需指定路径,直接使用命令,也是这种形式,只不过命令在bash这个解释器内部给补全了而已。使用bash或者其他你系统带的shell解释器程序......
  • 完成的定义DoD与验收标准AC的区别
    【作者按】本文是“Scrum框架下如何保证质量”的续篇,原文写于疫情期间2020年2月19日,是我2015年初成为CST后承担Scrum教学任务后的第一篇文章,当时请教过吕毅老师有无Scrum与质量关系论述的文章。原创文章发表后有不少反响。随后,我胆子越来越大,利用疫情期间的空闲时间,写了好多文章,后......
  • 【AI绘画stable diffusion教程】对普通人来说,Stable diffusion 和 Midjourney 怎么选?
    前言这个问题我觉得挺好,因为虽然StableDiffusion(SD)和Midjourney(MJ)这2个AI绘画工具的名字已经深入广大AI爱好者的内心了,但对于普通人(包括刚接触到AI绘画的童鞋)来说,看到这2个名字仍然还是会感觉到陌生。那么,今天我就来给新手用户来讲讲这2个AI绘画工具的区别,我们应该如何选......
  • a标签与Blob下载文件的区别和获取文件下载进度mi
    文件下载的几种方式。大家都做过文件下载,无非就是通过a标签给定一个href。用户点击下载按钮。或者使用Blob的方式进行下载。这两种是很常见的,也是我们平时做使用最多的方式。那么我们知道这2种方式有什么区别呢?如果不清楚,也别着急下面我们一起来探索下:node+express+co......
  • SpringCloud与Dubbo的区别
    在构建分布式系统时,SpringCloud和Dubbo是两个常用的框架。虽然它们都能帮助开发者实现服务之间的通信和治理,但在设计理念、使用场景和技术实现上,两者存在明显的区别。本文将详细探讨SpringCloud与Dubbo的不同之处,以帮助开发者更好地选择适合自己的框架。初始定位与架构设计Sp......
  • node的事件循环和浏览器的事件循环有什么区别?
    Node.js和浏览器的事件循环虽然都是基于事件驱动的架构,但它们在实现和一些细节上有所不同。主要区别如下:1.I/O处理:浏览器:浏览器中的I/O操作主要依赖于WebAPIs(例如:fetch,XMLHttpRequest,setTimeout等)。浏览器负责管理这些API,并在操作完成后将相应的事件添加到事......
  • a标签与Blob下载文件的区别和获取文件下载进度
    文件下载的几种方式。大家都做过文件下载,无非就是通过a标签给定一个href。用户点击下载按钮。或者使用Blob的方式进行下载。这两种是很常见的,也是我们平时做使用最多的方式。那么我们知道这2种方式有什么区别呢?如果不清楚,也别着急下面我们一起来探索下:node+express+co......