认识进程(多线程_初阶)

简介: 认识进程(多线程_初阶)

认识进程

到底啥是进程呢!!!


进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。


简单讲就是跑起来的应用程序(exe)就是进程!!!


我们电脑磁盘上有很多exe文件,我们如果双击这个exe文件,那这个文件只会静静的躺在磁盘上和咸鱼无异!!!

image.png

只有exe文件(可执行文件)运行了才能称作为进程!!!

image.png

我们可以打开我们的计算机任务管理,看看此时我们的操作系统上都跑了那些进程!!!


一个执行文件(exe)是如何跑起来变成一个进程的呢?


一开始在磁盘上的exe文件

运行后由操作系统进行资源分配和调度!

将文件加载到内存

cpu开始执行exe中的一些指令

线程

我们经常听到的线程又是个啥呢?和进程又有什么关系呢?


线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes,但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。


我们知道进程是操作系统资源分配和调度的基本单元!!!


就比方进程就是我们生活中的一个个工厂!!而线程就是工厂中的车间或者流水线!!!


一个工厂可以有一个或多个流水线!


一个进程也可以包含一个或多个线程!!!


线程是操作系统进行运算调度的最小单位!!!


就是说,操作系统需要给进程分配资源和空间,而多个线程公用这块块空间和资源!


进程process也称为task任务! 任务管理系统,也就是我们操作系统的进程管理系统!!!


进程的属性和管理

计算机是如何管理进程的?

首先我们需要描述一个进程(明确出进程的一些重要属性)

然后组织若多个线程(使用数据结构把多个进程描述信息放在一起用于增删查改)


我们的的进程都是由操作系统分配和调度的!

而操作系统是由C/C++编写的!

我们通过结构体来描述进程的属性

然后通过双向链表将若干个进程组织起来,就可以进行增删查改操作!!!


进程属性

基础属性

我们知道我们每个人都有自己的名字和特点!而进程也是如此!

每个进程有自己的属性用来区分不同的进程!!!

PCB


为了描述控制进程的运行,系统中存放进程的管理和控制信息的数据结构称为进程控制块(PCB Process Control Block),它是进程实体的一部分,是操作系统中最重要的记录性数据结构。它是进程管理和控制的最重要的数据结构,每一个进程均有一个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤消而撤消。


我们通过PCB就可以知道这个进程的信息!


pcb 中的一些属性


pid

进程id对进程进行身份标识!

内存指针

指明该进程要执行的指令和代码或者资源在内存的具体位置

文件描述符表

一个进程可能关联多个其他文件,给该进程提供资源,所以我们需要知道该进程要要用到那些文件! 打开一个文件后,文件描述符表就会增加一个信息,文件描述符表可以视为一个数组,元素为结构体!

我们一个进程会默认打开三个文件(系统自动打开):

标准输入(System.in)

标准输出(System.out)

标准错误(System.err)


实现进程调度的属性

并发和并行


我们提到进程调度就不得不提并发和并行!

我们知道现在的计算机的cpu都是采用多个核心的cpu!

一个cpu核心某一时刻只能执行一个进程!!!

但是多个cpu核心可以同时执行不同的进程!这就是并行!


微观上:

并行: 每个cpu核心同一时刻执行不同的任务!

并发:一个cpu核心先执行任务1,在进行任务2!!!


但是我们知道cpu的执行速度超乎你的想象! 快的一批!

所以再宏观上我们无法感受到进程某时刻是并发执行还是并行执行!通常我们将并发和并行通常为并发我们只是在操作系统,区别这两个,其他地方我们都默认叫并发!!!


状态

这个状态就描述了该进程如何调度

就绪状态 : 随时可以上CPU执行

阻塞状态/睡眠状态:占时不能上CPU执行

还有其他的状态以后在介绍!

优先级

我们的计算机一般都是多个进程并发执行

那么就需要明确一个进程的优先级

先给那个进程分配时间,分配多久时间!

以及谁分配的时间多少!

记账信息

统计每个进程分别执行的时间,分别执行了那些指令!

等待了多久,给进程调度提供依据!

上下文

记入上次进程调度出CPU时的执行状态!

我们的进程不可能一直执行下去,当我们的CPU需要调度其他进程时,那么该进程就要出cpu,当我们需要再次执行该进程时,上下文属性就可以精准的恢复到上次进程执行的位置!

就是在进程调出CPU时,我们吧寄存器中的数据保存在内存中(存档),下次执行该进程时在调回寄存器(读档)

我们举一个生活中的例子便于理解上述进程调度属性!


假如有一个海王(操作系统)

海王同时谈了3个对象!!!

一个富婆

一个辣妹

一个甜妹

我们知道该操作明显就是不道德的! 但是只要这3个对象没有见面就问题不大海王只需要安排好在某一时间约一个妹子!(也就是宏观上cpu只执行了一个进程)

假如海王比较喜欢辣妹,再是富婆,最后是甜妹(可爱在性感面前不值一提)(这里也就是进程的优先级)

星期一二三 和辣妹一起

星期四五 和富婆在一起

星期六 和甜妹在一起

周天休息

正常情况下,三个妹子随叫随到(也就是进程就绪)

结果辣妹去出差去了一个月回不来!!(此时该进程就是阻塞状态/睡眠状态)

海王和甜妹待的时间太少了,甜妹不愿意了(进程的记账信息存档)

所以此时海王就要给甜妹安排更多的时间!!!

当某一天,富婆说要带海王去讲父母, 辣妹说要带他去见闺蜜,都叫他准备好礼物! 结果海王把给富婆父母的礼物给了,辣妹闺蜜!如果记入了(进程上下文属性)就不会搞错!!!


显然海王是不对的!!!令人唾弃!!!


进程调度

无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。


就是cpu如何给进程分配资源!

我们知道每个进程都分配了自己的空间!但是cpu,内存资源有限!!!

当我们的一个进程出bug因为在不同的空间,并不会影响其他进程!


进程的独立性


就比如现在的疫情

image.png

如果一个居民感染了,那么只需要将该栋楼封锁即可!!!(该进程出现bug了)并不会影响其他进程!!!


进程间的通信

但是显然进程间不可能一直独立,不进行交流,cpu会分配一些公共空间供进程进行通信!!!


主要通信方式有两种:


文件操作

网络操作(socket)

后面我们会介绍!!!


进程和线程的区别

高频面试题


进程是系统分配资源的基本单位!

线程是系统调度运行的最小单位!

一个进程包含一个或多个线程!

进程和线程都是为了处理并发编程!

进程缺点,创建和销毁效率较低(需要分配资源),而线程弥补了该缺点!(轻量级进程),一个线程执行一段代码!!!

进程具有独立性,每个进程会有自己的虚拟空间! 一个进程挂了不会影响另一个进程!

但是一个进程有多个线程,一个线程挂了可能影响其他线程,甚至导致进程奔溃!!!

目录
相关文章
|
2月前
|
UED 开发者 Python
探索操作系统的心脏:理解进程与线程
【8月更文挑战第31天】在数字世界的海洋中,操作系统犹如一艘巨轮,其稳定航行依赖于精密的进程与线程机制。本文将揭开这一机制的神秘面纱,通过深入浅出的语言和直观的代码示例,引领读者从理论到实践,体验进程与线程的魅力。我们将从基础概念出发,逐步深入到它们之间的联系与区别,最后探讨如何在编程实践中高效运用这些知识。无论你是初学者还是有经验的开发者,这篇文章都将为你的技术之旅增添新的航标。
|
7天前
|
存储 消息中间件 资源调度
「offer来了」进程线程有啥关系?10个知识点带你巩固操作系统基础知识
该文章总结了操作系统基础知识中的十个关键知识点,涵盖了进程与线程的概念及区别、进程间通信方式、线程同步机制、死锁现象及其预防方法、进程状态等内容,并通过具体实例帮助理解这些概念。
「offer来了」进程线程有啥关系?10个知识点带你巩固操作系统基础知识
|
6天前
|
资源调度 算法 调度
深入浅出操作系统之进程与线程管理
【9月更文挑战第29天】在数字世界的庞大舞台上,操作系统扮演着不可或缺的角色,它如同一位精通多门艺术的导演,精心指挥着每一个进程和线程的演出。本文将通过浅显的语言,带你走进操作系统的内心世界,探索进程和线程的管理奥秘,让你对这位幕后英雄有更深的了解。
|
10天前
|
Java
直接拿来用:进程&进程池&线程&线程池
直接拿来用:进程&进程池&线程&线程池
|
11天前
|
负载均衡 Java 调度
探索Python的并发编程:线程与进程的比较与应用
本文旨在深入探讨Python中的并发编程,重点比较线程与进程的异同、适用场景及实现方法。通过分析GIL对线程并发的影响,以及进程间通信的成本,我们将揭示何时选择线程或进程更为合理。同时,文章将提供实用的代码示例,帮助读者更好地理解并运用这些概念,以提升多任务处理的效率和性能。
|
21天前
|
开发者 Python
深入浅出操作系统:进程与线程的奥秘
【8月更文挑战第46天】在数字世界的幕后,操作系统扮演着至关重要的角色。本文将揭开进程与线程这两个核心概念的神秘面纱,通过生动的比喻和实际代码示例,带领读者理解它们的定义、区别以及如何在编程中运用这些知识来优化软件的性能。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和实用技巧。
|
5天前
|
数据采集 消息中间件 并行计算
进程、线程与协程:并发执行的三种重要概念与应用
进程、线程与协程:并发执行的三种重要概念与应用
16 0
|
5天前
|
数据采集 Linux 调度
Python之多线程与多进程
Python之多线程与多进程
12 0
|
28天前
|
存储 Java 数据处理
进程中的线程调度
进程是应用程序运行的基本单位,包括主线程、用户线程和守护线程。计算机由存储器和处理器协同操作,操作系统设计为分时和分任务模式。在个人PC普及后,基于用户的时间片异步任务操作系统确保了更好的体验和性能。线程作为进程的调度单元,通过覆写`Thread`类的`run`方法来处理任务数据,并由系统调度框架统一管理。微服务架构进一步将应用分解为多个子服务,在不同节点上执行,提高数据处理效率与容错性,特别是在大规模数据存储和处理中表现显著。例如,利用微服务框架可以优化算法,加速业务逻辑处理,并在不同区块间分配海量数据存储任务。
|
10天前
|
存储 算法 Java
关于python3的一些理解(装饰器、垃圾回收、进程线程协程、全局解释器锁等)
该文章深入探讨了Python3中的多个重要概念,包括装饰器的工作原理、垃圾回收机制、进程与线程的区别及全局解释器锁(GIL)的影响等,并提供了详细的解释与示例代码。
15 0

相关实验场景

更多
下一篇
无影云桌面