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

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

认识进程

到底啥是进程呢!!!


进程(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月前
|
消息中间件 并行计算 安全
进程、线程、协程
【10月更文挑战第16天】进程、线程和协程是计算机程序执行的三种基本形式。进程是操作系统资源分配和调度的基本单位,具有独立的内存空间,稳定性高但资源消耗大。线程是进程内的执行单元,共享内存,轻量级且并发性好,但同步复杂。协程是用户态的轻量级调度单位,适用于高并发和IO密集型任务,资源消耗最小,但不支持多核并行。
48 1
|
10天前
|
调度 开发者
深入理解:进程与线程的本质差异
在操作系统和计算机编程领域,进程和线程是两个核心概念。它们在程序执行和资源管理中扮演着至关重要的角色。本文将深入探讨进程与线程的区别,并分析它们在现代软件开发中的应用和重要性。
32 5
|
26天前
|
并行计算 数据处理 调度
Python中的并发编程:探索多线程与多进程的奥秘####
本文深入探讨了Python中并发编程的两种主要方式——多线程与多进程,通过对比分析它们的工作原理、适用场景及性能差异,揭示了在不同应用需求下如何合理选择并发模型。文章首先简述了并发编程的基本概念,随后详细阐述了Python中多线程与多进程的实现机制,包括GIL(全局解释器锁)对多线程的影响以及多进程的独立内存空间特性。最后,通过实例演示了如何在Python项目中有效利用多线程和多进程提升程序性能。 ####
|
1月前
|
Linux 调度 C语言
深入理解操作系统:进程和线程的管理
【10月更文挑战第32天】本文旨在通过浅显易懂的语言和实际代码示例,带领读者探索操作系统中进程与线程的奥秘。我们将从基础知识出发,逐步深入到它们在操作系统中的实现和管理机制,最终通过实践加深对这一核心概念的理解。无论你是编程新手还是希望复习相关知识的资深开发者,这篇文章都将为你提供有价值的见解。
|
28天前
|
Java
java小知识—进程和线程
进程 进程是程序的一次执行过程,是系统运行的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。简单来说,一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源如CPU时间,内存空间,文件,文件,输入输出设备的使用权等等。换句话说,当程序在执行时,将会被操作系统载入内存中。 线程 线程,与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间做切换工作时,负担要比
26 1
|
1月前
深入理解操作系统:进程与线程的管理
【10月更文挑战第30天】操作系统是计算机系统的核心,它负责管理计算机硬件资源,为应用程序提供基础服务。本文将深入探讨操作系统中进程和线程的概念、区别以及它们在资源管理中的作用。通过本文的学习,读者将能够更好地理解操作系统的工作原理,并掌握进程和线程的管理技巧。
40 2
|
1月前
|
调度 Python
深入浅出操作系统:进程与线程的奥秘
【10月更文挑战第28天】在数字世界的幕后,操作系统悄无声息地扮演着关键角色。本文将拨开迷雾,深入探讨操作系统中的两个基本概念——进程和线程。我们将通过生动的比喻和直观的解释,揭示它们之间的差异与联系,并展示如何在实际应用中灵活运用这些知识。准备好了吗?让我们开始这段揭秘之旅!
|
2月前
|
存储 消息中间件 人工智能
进程,线程,协程 - 你了解多少?
本故事采用简洁明了的对话方式,尽洪荒之力让你在轻松无负担的氛围中,稍微深入地理解进程、线程和协程的相关原理知识
41 2
进程,线程,协程 - 你了解多少?
|
2月前
|
Python
Python中的多线程与多进程
本文将探讨Python中多线程和多进程的基本概念、使用场景以及实现方式。通过对比分析,我们将了解何时使用多线程或多进程更为合适,并提供一些实用的代码示例来帮助读者更好地理解这两种并发编程技术。
|
2月前
|
消息中间件 并行计算 安全
进程、线程、协程
【10月更文挑战第15天】进程、线程和协程是操作系统中三种不同的执行单元。进程是资源分配和调度的基本单位,每个进程有独立的内存空间;线程是进程内的执行路径,共享进程资源,切换成本较低;协程则更轻量,由用户态调度,适合处理高并发和IO密集型任务。进程提供高隔离性和安全性,线程支持高并发,协程则在资源消耗和调度灵活性方面表现优异。
60 2