进程和线程

目录

进程

线程 

进程和线程的区别


进程

什么是进程?

每个应用程序运行在操作系统上时, 操作系统会提供一种抽象,好像系统上只有这个程序在运行,所有的硬件资源都被这个程序在使用。

这种假象是通过抽象了一个进程的概念来完成的。


进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程。

同时,进程又是操作系统进行资源分配的基本单位。

在操作系统中,进程是程序执行的实体,它代表了程序在执行时的状态。一个进程通常包括以下几个部分:

1. **程序代码**:这是程序的指令集合,存储在磁盘上,只有在执行时才会被加载到内存中。

2. **进程控制块(PCB)**:操作系统用来管理进程的数据结构,包含了进程的标识符、状态、优先级、程序计数器、寄存器集合、CPU时间等信息。

3. **内存空间**:进程在执行时,会占用一定的内存空间,用于存储程序的代码、数据和堆栈等。

4. **资源**:进程在执行过程中可能会使用到的文件、设备等系统资源。

5. **进程状态**:进程在生命周期中会有不同的状态,如就绪、运行、等待(阻塞)和终止等。

当一个程序被加载到内存中,并且开始执行时,操作系统会为它创建一个进程。这个进程会按照程序的指令执行,直到程序完成执行或者被操作系统终止。因此,进程是程序在操作系统中运行的动态实例。


 

线程 

线程(Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一个进程可以包含多个线程,它们共享进程的资源,如内存空间和文件句柄,但每个线程都有自己的执行栈和程序计数器。

线程可以看作是轻量级的进程,每个进程都包含一个或多个线程,线程也是一个要执行的任务。

当一个进程内的所有线程都结束时,这个进程才结束。

进程是操作系统资源分配的基本单位,一个进程中的线程之间会共享分配给进程的资源。

线程是CPU调度和执行的单位,可以并发执行。

第一个线程创建的时候(和进程一起创建的时候)申请资源,后续再创建线程,不涉及到资源申请操作。

如果一个进程中有5个线程,就有5份这样的数据,但是这5个线程共用同一个文件描述表和内存指针。

注意:

虽然提高线程的数目能够提升效率,但也不是”线性增长”,线程到达一定数目后,就算线程再多,也没法起到作用,反而会拖慢程序的性能。

线程安全:

一个线程抛出异常,可能会使所有的线程都无法继续工作。

当多个线程访问共享数据时,需要确保线程安全,以防止数据损坏。

关于线程的调度问题:

是操作系统内核控制的,程序员在应用程序这个层次无法感知,也无法干预。

线程的创建和管理是现代操作系统和编程语言提供的基本功能,它们允许程序以并发的方式执行,提高资源利用率和程序性能。在多核处理器上,线程可以真正并行执行,进一步提高计算效率。


进程和线程的区别

1.进程包含线程

2.进程是操作系统资源分配的基本单位

3.线程是操作系统调度执行的基本单位

4.进程之间存在父子关系,线程之间不存在

5.进程开销大,线程开销小

6.进程是独立运行的,一个进程崩溃不会直接影响到其他进程,线程之间是相互依赖的,同一进程下的一个线程崩溃可能会影响到其他线程。

7.进程是由操作系统进行调度的,进程间的切换是操作系统的工作。线程是由进程调度的,线程的调度可以由操作系统完成,也可以由线程库完成。


请点一个免费的赞~~

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

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

相关文章

什么是编译器?

我们平时所说的程序,是指双击后就可以直接运行的程序,这样的程序被称为可执行程序(Executable Program)。在 Windows 下,可执行程序的后缀有 .exe 和 .com(其中 .exe 比较常见);在类…

决战Linux操作系统

前言: 你是否也曾经为Linux所困扰过,在网上找的资料零零散散,是否学完Linux后还是懵懵懂懂,别怕,这篇博客是博主精心为你准备的,现在,就让我们一起来走进Linux的世界,决战Linux&…

C语言 sizeof 的介绍,以及sizeof计算数组名、 数组首地址、数组的元素之间的区别

一、sizeof 介绍 sizeof 是 C 语言中的一个运算符,用于计算数据类型或变量在内存中占用的字节数。用于计算数据类型或变量所占的内存大小,以字节为单位。它可以在编译时计算其操作数的大小,并返回一个 size_t 类型的值。它可以帮助了解不同类…

WebGL 小白入门学习

1. WebGL是什么? WebGL(Web Graphics Library)是一种JavaScript API,它允许你在不需要安装任何额外插件的情况下,直接在浏览器中渲染高性能的2D和3D图形。WebGL利用了用户的图形处理单元(GPU)来…

统信桌面专业版【手动分区安装UOS系统】介绍

统信桌面专业版【手动分区安装UOS系统】介绍 全文导读功能概述准备环境安装步骤注意事项 💐The Begin💐点点关注,收藏不迷路💐 全文导读 本文旨在详细介绍在安装UOS系统时采用手动分区的方法。虽然全盘安装通常是推荐的安装方式&…

实战篇:(四)Vue2 + Three.js 创建可交互的360度全景视图,可控制旋转、缩放完整代码

Vue2 Three.js 创建可交互的360度全景视图,可控制旋转、缩放 引言 在现代网页开发中,三维图形技术已经成为提升用户体验的重要工具。本文将展示如何使用 Three.js 创建一个简单的可交互360度全景视图。通过这一项目,你将能够学习到基本的场…

hadoop集群搭建-安装虚拟机

2.1 安装虚拟机 在本地搭建集群就需要这么几个事 装虚拟机 安装环境 配置集群 启动 这篇博客主要就是讲的装虚拟机这一个环节的 装虚拟机就是和组装一台现实中的电脑一样,首先来说就是要有硬件,就是组装硬件,然后就是装系统&#xff…

Kind部署的K8s证书过期后的解决方案

证书通常有效期为1年,一年后服务将不可用解决方案就是更新证书 1. 找到 Kind 集群的控制平面容器名称,容器名称不一定是这个 docker ps --filter "namekind-control-plane"2. 进入 Kind 控制平面的容器: docker exec -it kind-control-plane…

javascript object

用const去define一个constant 用let (如果要reassign的话) 一个变量。

Redis-缓存一致性

缓存双写一致性 更新策略探讨 面试题 缓存设计要求 缓存分类: 只读缓存:(脚本批量写入,canal 等)读写缓存 同步直写:vip数据等即时数据异步缓写:允许延时(仓库,物流&a…

解锁C++继承的奥秘:从基础到精妙实践(下)

文章目录 前言🥐五、多继承,菱形继承和菱形虚拟继承🧀5.1 多继承🧀5.2 菱形继承🧀5.3 虚拟继承(解决菱形继承问题)5.3.1 虚拟继承的语法:5.3.2 虚拟继承示例: &#x1f9…

springboot 整合 快手 移动应用 授权 发布视频 小黄车

前言: 因快手文档混乱,官方社区技术交流仍有很多未解之谜,下面3种文档的定义先区分。 代码中的JSON相关工具均用hutool工具包 1.快手 移动双端 原生SDK 文档https://mp.kuaishou.com/platformDocs/develop/mobile-app/ios.html 2.快手 Api 开…

Elasticsearch设置 X-Pack认证,设置账号和密码

前言 以下Elasticsearch版本:7.9.3 ES自带的X-Pack密码验证: X-Pack是elasticsearch的一个扩展包,将安全,警告,监视,图形和报告功能捆绑在一个易于安装的软件包中,所以我们想要开启账号密码验证…

网优学习干货:王者荣耀游戏用户体验洞察及质差识别(1)

一、课题背景 二、课题目的 针对热点游戏(王者荣耀)进行业务质量评估,并通过对端到端定界分析,从无线、核心网、互联网维度识别影响用户体验关键因素,为游戏用户的体验优化提供依据。 三、课题实施进度 王者荣耀卡顿特…

linux------缓冲区与C库的原理

前言 一、缓冲区 缓冲区的作用是提高效率,因为将数据写入到设备,是需要调用系统接口的,如果每次写入缓冲区的数据就调用一次系统调用,涉及到系统调用这时操作系统就会介入,用户态转为内核态,这个过程需要时…

linux 搭建sentinel

1.下载 linux执行下面的命令下载包 wget https://github.com/alibaba/Sentinel/releases/download/1.8.6/sentinel-dashboard-1.8.6.jar2.启动 nohup java -Dserver.port9090 -Dcsp.sentinel.dashboard.serverlocalhost:9090 -Dproject.namesentinel-dashboard -jar sentin…

k8s中控制器的使用

一、replicaset控制器 ReplicaSet 是下一代的 Replication Controller,官方推荐使用ReplicaSet ReplicaSet和Replication Controller的唯一区别是选择器的支持,ReplicaSet支持新的基于集合的选择器需求 ReplicaSet 确保任何时间都有指定数量的 Pod 副…

Metasploit渗透测试之攻击终端设备和绕过安全软件

概述 在之前,重点讨论了针对服务器端的利用。但在当下,最成功的攻击都是针对终端的;原因是,随着大部分安全预算和关注都转向面向互联网的服务器和服务,越来越难找到可利用的服务,或者至少是那些还没有被破…

数据库设计与开发—初识SQLite与DbGate

一、SQLite与DbGate简介 (一)SQLite[1][3] SQLite 是一个部署最广泛、用 C 语言编写的数据库引擎,属于嵌入式数据库,其作为库被软件开发人员嵌入到应用程序中。 SQLite 的设计允许在不安装数据库管理系统或不需要数据库管理员的情…

一篇文章快速认识YOLO11 | 关键改进点 | 安装使用 | 模型训练和推理

前言 本文分享YOLO11的关键改进点、性能对比、安装使用、模型训练和推理等内容。 YOLO11 是 Ultralytics 最新的实时目标检测器,凭借更高的精度、速度和效率重新定义了可能性。 除了传统的目标检测外,YOLO11 还支持目标跟踪、实例分割、姿态估计、OBB…