进程与线程的区别和联系

简介: 进程与线程的区别和联系

🔎进程

进程简单来说就是运行着的程序

如果不太理解可以参考一下这篇文章

进程

🔎线程

线程可以理解为程序的功能

🔎进程与线程的联系

进程包含线程

一个进程可以有一个或多个线程

每个线程都是一个独立的执行流, 线程与线程之间, 也是并发执行的

举个栗子🥝

我们可以把 QQ 理解为一个进程

QQ 有着比较多的功能, 可以把这些功能理解为不同的线程

我们可以一边使用 QQ 进行语音聊天, 一边使用 QQ 打字回复消息(并发执行)

🔎进程与线程的区别

(1)
每个进程都有自己独立的内存空间和文件描述符表
同一个进程下的多个线程, 共享同一份地址空间和文件描述符表

举个栗子🥝

滑稽老哥家里是做生意的

由于最近生意比较火爆, 所以他决定将厂房中的机器增加到两台(原本只有一台)

这时候滑稽老哥比较为难

他有两个选择

(1)再租一个厂房(创建一个新的线程)

(2)在之前的厂房另设一台机器(创建一个新的线程)

对于选择(1), 需要另租一个厂房, 开销是比较大的

(进程比较重量, 创建与销毁的成本较高)

对于选择(2), 虽然厂子的闲置空间会没有之间充裕, 但只用购买机器, 不用再另租厂房, 开销较小

(线程相较于进程较为轻量)

于是滑稽老哥选择在之前的厂房另设一台机器(创建一个新的线程)

对于上述描述

每个进程都有自己独立的内存空间和文件描述符表

(每个厂房有自己独立的地址)

同一个进程下的多个线程, 共享同一份地址空间和文件描述符表

(在同一个厂房下的机器, 共享同一个厂房的地址)


(2)
进程是操作系统资源分配的基本单位
线程是操作系统调度执行的基本单位

解释

进程是重量的, 不是轻量的

这主要体现在资源分配上

比如分配内存时

(1)系统需要先去遍历空闲内存的表, 找到一块大小差不多的空间进行分配

(2)很多的进程都去向系统申请资源, 系统在分配资源时, 就需要逐个进行分配

资源分配, 是一个耗时的操作

所以进程是重量的

而对于线程来说

由于线程是进程的一部分

也就相当于系统资源已经是分配好的了(创建进程时进行资源分配, 进程产生后也就有了线程)

此时只需要多个线程并发的执行任务(操作系统调度线程)

所以

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

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

想象一下

QQ 的打开与关闭,看作是进程的创建与销毁(需要进行资源的分配)

打开 QQ 后, 需要执行不同的功能, 看作是操作系统在调度不同的线程去完成不同的任务


(3)
进程之间具有独立性, 一个进程挂了, 不会影响到其他的进程
同一个进程中的多个线程之间, 一个线程挂了, 可能会影响到其他线程, 并把这个进程也挂掉

举个栗子🥝

滑稽老哥需要完成吃 100 个鸡腿这项任务

只有一位滑稽老铁吃比较慢

于是就又来了几位滑稽老哥帮忙一起吃

(任务完成比较慢, 多加一些线程)

感觉吃的还是比较慢

于是就又来了几位滑稽老哥帮忙一起吃

(任务完成比较慢, 多加一些线程)

但是这时候由于滑稽老哥太多了, 导致一部分滑稽老哥吃不上鸡腿🍗

可能产生问题

(线程过多, 可能产生问题)

由于滑稽老哥A 想去吃鸡腿却发现桌子已经被围满了(没有空余位置)

这时候滑稽老哥A 就让滑稽老哥B 离开

恰好滑稽老哥B 是个暴脾气, 结果滑稽老哥B 就一气之下把桌子掀翻了

其他滑稽老哥也不能吃鸡腿🍗了, 吃鸡腿这项任务也中止了

(同一个进程中的多个线程之间, 一个线程挂了, 可能会影响到其他线程, 并把这个进程也挂掉)

如果将鸡腿分成两份(两个进程)

再让滑稽老哥去吃鸡腿(线程完成任务)

这样即使其中一个的桌子被掀, 另一个房间仍然可以照常吃鸡腿🍗

(进程之间具有独立性, 一个进程挂了, 不会影响到其他的进程)

🔎总结

🔎 结尾

创作不易,如果对您有帮助,希望您能点个免费的赞👍

大家有什么不太理解的,可以私信或者评论区留言,一起加油

相关文章
|
1月前
|
调度 开发者 Python
深入浅出操作系统:进程与线程的奥秘
在数字世界的底层,操作系统扮演着不可或缺的角色。它如同一位高效的管家,协调和控制着计算机硬件与软件资源。本文将拨开迷雾,深入探索操作系统中两个核心概念——进程与线程。我们将从它们的诞生谈起,逐步剖析它们的本质、区别以及如何影响我们日常使用的应用程序性能。通过简单的比喻,我们将理解这些看似抽象的概念,并学会如何在编程实践中高效利用进程与线程。准备好跟随我一起,揭开操作系统的神秘面纱,让我们的代码运行得更加流畅吧!
|
1月前
|
消息中间件 Unix Linux
【C语言】进程和线程详解
在现代操作系统中,进程和线程是实现并发执行的两种主要方式。理解它们的区别和各自的应用场景对于编写高效的并发程序至关重要。
62 6
|
1月前
|
调度 开发者
深入理解:进程与线程的本质差异
在操作系统和计算机编程领域,进程和线程是两个核心概念。它们在程序执行和资源管理中扮演着至关重要的角色。本文将深入探讨进程与线程的区别,并分析它们在现代软件开发中的应用和重要性。
62 5
|
1月前
|
算法 调度 开发者
深入理解操作系统:进程与线程的管理
在数字世界的复杂编织中,操作系统如同一位精明的指挥家,协调着每一个音符的奏响。本篇文章将带领读者穿越操作系统的幕后,探索进程与线程管理的奥秘。从进程的诞生到线程的舞蹈,我们将一起见证这场微观世界的华丽变奏。通过深入浅出的解释和生动的比喻,本文旨在揭示操作系统如何高效地处理多任务,确保系统的稳定性和效率。让我们一起跟随代码的步伐,走进操作系统的内心世界。
|
1月前
|
调度 开发者
核心概念解析:进程与线程的对比分析
在操作系统和计算机编程领域,进程和线程是两个基本而核心的概念。它们是程序执行和资源管理的基础,但它们之间存在显著的差异。本文将深入探讨进程与线程的区别,并分析它们在现代软件开发中的应用和重要性。
60 4
|
2月前
|
并行计算 数据处理 调度
Python中的并发编程:探索多线程与多进程的奥秘####
本文深入探讨了Python中并发编程的两种主要方式——多线程与多进程,通过对比分析它们的工作原理、适用场景及性能差异,揭示了在不同应用需求下如何合理选择并发模型。文章首先简述了并发编程的基本概念,随后详细阐述了Python中多线程与多进程的实现机制,包括GIL(全局解释器锁)对多线程的影响以及多进程的独立内存空间特性。最后,通过实例演示了如何在Python项目中有效利用多线程和多进程提升程序性能。 ####
|
2月前
|
Linux 调度 C语言
深入理解操作系统:进程和线程的管理
【10月更文挑战第32天】本文旨在通过浅显易懂的语言和实际代码示例,带领读者探索操作系统中进程与线程的奥秘。我们将从基础知识出发,逐步深入到它们在操作系统中的实现和管理机制,最终通过实践加深对这一核心概念的理解。无论你是编程新手还是希望复习相关知识的资深开发者,这篇文章都将为你提供有价值的见解。
|
2月前
|
Java
java小知识—进程和线程
进程 进程是程序的一次执行过程,是系统运行的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。简单来说,一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源如CPU时间,内存空间,文件,文件,输入输出设备的使用权等等。换句话说,当程序在执行时,将会被操作系统载入内存中。 线程 线程,与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间做切换工作时,负担要比
32 1
|
2月前
深入理解操作系统:进程与线程的管理
【10月更文挑战第30天】操作系统是计算机系统的核心,它负责管理计算机硬件资源,为应用程序提供基础服务。本文将深入探讨操作系统中进程和线程的概念、区别以及它们在资源管理中的作用。通过本文的学习,读者将能够更好地理解操作系统的工作原理,并掌握进程和线程的管理技巧。
46 2
|
2月前
|
监控 JavaScript 前端开发
python中的线程和进程(一文带你了解)
欢迎来到瑞雨溪的博客,这里是一位热爱JavaScript和Vue的大一学生分享技术心得的地方。如果你从我的文章中有所收获,欢迎关注我,我将持续更新更多优质内容,你的支持是我前进的动力!🎉🎉🎉
30 0