进程与线程的区别?

并发和并行

在聊进程和线程的概念之前,首先了解一下操作系统相关概念,大部分操作系统(如Windos、Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。任务执行的一小段时间叫做时间片,任务正在执行时的状态叫运行状态,任务的时间片用完会被强制暂停去执行下一个任务,被暂停的任务就处于就绪状态等待下一个属于它的时间片到来。这样每个任务都能得到执行,由于CPU的执行效率非常高,时间片非常短,在各个任务之间快速切换,给人的感觉就是多个任务在
“同时进行”,这就是我们所说的并发。
在这里插入图片描述

当然,这是对于单核CPU来说,现在大多数计算机都是多核的,在核与核之间是并行运行的,相互之间不影响,在任意时刻,可以同时有多个任务同时运行在多核CPU上,但是对于每一个CPU内部,还是以抢占时间片的方式并发执行:
在这里插入图片描述

CPU、操作系统、程序的概念

  • 计算机的核心是CPU,它承担了所有的计算任务。

  • 操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件。

  • 程序是一组由编程语言编写的,用于操作计算机的指令,运行于操作系统之上。

进程和线程的概念

进程

进程是程序的一次执行过程。

进程是操作系统进行资源分配和调度的一个独立单位。

进程具有的特征:

  1. 动态性,从程序执行开始到程序结束执行,进程是有声明周期的,在动态变化的。
  2. 并发性,任何进程都可以和其他进程并发执行。
  3. 独立性,进程是操作系统资源分配和调度的独立单位。
  4. 结构性,进程有程序、数据和进程控制块三部分组成。

进程是能拥有资源和独立运行的最小单位,每个进程有各自独立的内存,使得各个进程之间的内存地址相互隔离。

线程

线程是程序执行的最小单位。

任务调度采用的是时间片轮转的抢占式调度方式,线程CPU调度和分派的最小单位。

  1. 进程是操作系统进行资源分配最小单位。
  2. 线程是线程CPU调度和运行的最小单位。

一个进程可以拥有多个线程,各个线程共享进程内存空间。

真正去抢占CPU时间片,得到CPU时间片并运行的是线程。

线程的生命周期

以Java为例,Java中线程有六大状态:

public enum State {NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED}

在这里插入图片描述

wait,join操作都会释放锁,所以结束后不会里面进入Runnable状态,而是去获取锁,如果获取到就马上进入Runnable状态。
sleep操作不会释放锁,所以结束后可以直接进入Runnable状态

进程与线程的区别

  • 进程是操作系统分配资源的最小单位。
  • 线程是程序执行的最小单位。

一个进程由一个或多个线程组成,线程是一个进程中的代码的不同执行路线。

进程之间相互独立,但同一进程下的各个线程共享程序的内存空间(代码、数据集、堆等)。

在这里插入图片描述
在这里插入图片描述
真正在CPU执行和切换的是线程。

总之,线程和进程都是一种抽象的概念,线程是一种比进程更小的抽象,线程和进程都可以用于实现并发

为什么要让线程作为CPU调度和分派的最小单位?

调度和切换:线程上下文切换比进程上下文切换快得多。

程序:程序是一组由编程语言编写,计算机能够识别和执行的指令。

当程序由操作系统将其加载到内存并开始执行时,它就成为一个进程。

进程:进程是一个具有一定独立功能的程序在一个数据集合上依次动态执行的过程。

进程的创建、切换与销毁存在较大的时空开销,因此,线程的概念开始出现,线程被设计成为进程的一个执行路径,同一个进程的线程共享进程的资源,系统对线程的调度成本远远小于进程。

程序、进程、线程之间的关系:

在这里插入图片描述

进程和线程的区别总结:

  • 本质区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。
  • 包含关系: 一个进程至少有一个线程,线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。
  • 资源开销: 每个进程都有独立的地址空间,进程之间的切换会有较大的开销;线程可以看做轻量级的进程,同一个进程内的线程共享进程的地址空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换的开销小。
  • 影响关系: 一个进程崩溃后,在保护模式下其他进程不会被影响,但是一个线程崩溃可能导致整个进程被操作系统杀掉,所以多进程要比多线程健壮。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/617211.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习周记(第三十四周:文献阅读[GNet-LS])2024.4.8~2024.4.14

目录 摘要 ABSTRACT 1 论文信息 1.1 论文标题 1.2 论文摘要 1.3 论文模型 1.3.1 数据处理 1.3.2 GNet-LS 2 相关代码 摘要 本周阅读了一篇时间序列预测论文。论文模型为GNet-LS,主要包含四个模块:粒度划分模块(GD)&…

软件需求设计方法学全程实例剖析幻灯片04-系统用例图和用例规约

pdf文件已上传至本账号CSDN资源,也可以到以下地址下载:http://umlchina.com/training/umlchina_04_req.pdf

MYSQL08_页的概述、内部结构、文件头、文件尾、最大最小记录、页目录、区段表

文章目录 ①. 页的概述、大小②. 页的内部结构③. 第一部分 - 文件头④. 第一部分 - 文件尾⑤. 第二部分 - 空闲、用户记录、最大最小⑥. 第三部分 - 页目录⑦. 第三部分 - 页面头部⑧. 从数据页角度看B树⑨. 区、段和表、碎片区 ①. 页的概述、大小 ①. 数据库的存储结构&…

智慧能耗预付费系统解决方案——用户侧能源计量及收费

安科瑞电气股份有限公司 祁洁 15000363176 一、方案组织架构 二、方案特点 (1)多样组网,多样设备接入,多样部署; (2)集团管理、项目分级、分层拓扑; (3&#xff09…

深度学习体系结构——CNN, RNN, GAN, Transformers, Encoder-Decoder Architectures算法原理与应用

1. 卷积神经网络 卷积神经网络(CNN)是一种特别适用于处理具有网格结构的数据,如图像和视频的人工神经网络。可以将其视作一个由多层过滤器构成的系统,这些过滤器能够处理图像并从中提取出有助于进行预测的有意义特征。 设想你手…

Swagger的使用教程

Swagger简介 Swagger是一个规范和完整的API框架,可用于生成、描述、调用Restful风格的Web服务的接口文档。如果你在SpringBoot中使用的话,在项目启动后可以自动生成在线可调用的API文档,非常方便! 在SpringBoot中集成 首先在po…

蓝桥杯真题演练:2023B组c/c++

日期统计 小蓝现在有一个长度为 100 的数组,数组中的每个元素的值都在 0 到 9 的范围之内。 数组中的元素从左至右如下所示: 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3 …

shell-将密码输入错误超过4次的IP地址通过firewalld防火墙阻止访问

应用场景:防止恶意IP尝试ssh登录 脚本说明:将密码输入错误超过四次得ip地址通过iptable防火墙访问。 分析: 首先,需要知道ssh远程访问记录在哪一个文件中 /var/log/secure 其次,模拟远程访问输错密码,查…

以太网数据量大小字符串生成方法(可变单位)

0 前言 当我们想显示以太网数据量大小时,往往有个头疼的单位需要处理,单位取小了不一目了然,单位取大了精度太低。本例设计一个函数,将根据以太网数据量大小自动生成单位可变的字符串(KB、MB、GB、TB、PB)…

算法设计与分析实验报告c++实现(TSP问题、哈夫曼编码问题、顾客安排问题、最小生成树问题、图着色问题)

一、实验目的 1.加深学生对贪心算法设计方法的基本思想、基本步骤、基本方法的理解与掌握; 2.提高学生利用课堂所学知识解决实际问题的能力; 3.提高学生综合应用所学知识解决实际问题的能力。 二、实验任务 用贪心算…

C# Solidworks二次开发:相机访问相关API详解

大家好,今天要介绍的API为相机相关的API,这篇文章比较适合女孩子,学会了相机就会拍照了,哈哈。 下面是要介绍的API: (1)第一个为GetFocalDistance,这个API的含义为获取相机的焦距,…

共享内存及共享内存实现进程间通信

个人主页:Lei宝啊 愿所有美好如期而遇 我们知道,进程是具有独立性的,什么叫进程具有独立性?就是说,每一个进程都有他们自己的虚拟地址空间,而虚拟进程空间里的虚拟地址通过页表映射到不同的物理内存上&am…