进程与线程的区别和联系

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

🔎进程

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

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

进程

🔎线程

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

🔎进程与线程的联系

进程包含线程

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

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

举个栗子🥝

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

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

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

🔎进程与线程的区别

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

举个栗子🥝

滑稽老哥家里是做生意的

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

这时候滑稽老哥比较为难

他有两个选择

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

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

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

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

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

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

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

对于上述描述

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

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

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

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


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

解释

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

这主要体现在资源分配上

比如分配内存时

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

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

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

所以进程是重量的

而对于线程来说

由于线程是进程的一部分

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

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

所以

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

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

想象一下

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

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


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

举个栗子🥝

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

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

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

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

感觉吃的还是比较慢

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

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

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

可能产生问题

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

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

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

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

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

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

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

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

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

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

🔎总结

🔎 结尾

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

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

相关文章
|
1月前
|
Java 测试技术 API
【JUC】(1)带你重新认识进程与线程!!让你深层次了解线程运行的睡眠与打断!!
JUC是什么?你可以说它就是研究Java方面的并发过程。本篇是JUC专栏的第一章!带你了解并行与并发、线程与程序、线程的启动与休眠、打断和等待!全是干货!快快快!
385 2
|
1月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
129 1
|
1月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
147 1
|
9月前
|
存储 Linux API
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
|
7月前
|
并行计算 Linux
Linux内核中的线程和进程实现详解
了解进程和线程如何工作,可以帮助我们更好地编写程序,充分利用多核CPU,实现并行计算,提高系统的响应速度和计算效能。记住,适当平衡进程和线程的使用,既要拥有独立空间的'兄弟',也需要在'家庭'中分享和并行的成员。对于这个世界,现在,你应该有一个全新的认识。
280 67
|
5月前
|
调度 开发工具 Android开发
【HarmonyOS Next】鸿蒙应用进程和线程详解
进程的定义: 进程是系统进行资源分配的基本单位,是操作系统结构的基础。 在鸿蒙系统中,一个应用下会有三类进程:
193 0
|
8月前
|
SQL 监控 网络协议
YashanDB进程线程体系
YashanDB进程线程体系
|
10月前
|
消息中间件 调度
如何区分进程、线程和协程?看这篇就够了!
本课程主要探讨操作系统中的进程、线程和协程的区别。进程是资源分配的基本单位,具有独立性和隔离性;线程是CPU调度的基本单位,轻量且共享资源,适合并发执行;协程更轻量,由程序自身调度,适合I/O密集型任务。通过学习这些概念,可以更好地理解和应用它们,以实现最优的性能和资源利用。
344 11
|
10月前
|
Java Linux 调度
硬核揭秘:线程与进程的底层原理,面试高分必备!
嘿,大家好!我是小米,29岁的技术爱好者。今天来聊聊线程和进程的区别。进程是操作系统中运行的程序实例,有独立内存空间;线程是进程内的最小执行单元,共享内存。创建进程开销大但更安全,线程轻量高效但易引发数据竞争。面试时可强调:进程是资源分配单位,线程是CPU调度单位。根据不同场景选择合适的并发模型,如高并发用线程池。希望这篇文章能帮你更好地理解并回答面试中的相关问题,祝你早日拿下心仪的offer!
235 6
|
9月前
|
数据采集 Java 数据处理
Python实用技巧:轻松驾驭多线程与多进程,加速任务执行
在Python编程中,多线程和多进程是提升程序效率的关键工具。多线程适用于I/O密集型任务,如文件读写、网络请求;多进程则适合CPU密集型任务,如科学计算、图像处理。本文详细介绍这两种并发编程方式的基本用法及应用场景,并通过实例代码展示如何使用threading、multiprocessing模块及线程池、进程池来优化程序性能。结合实际案例,帮助读者掌握并发编程技巧,提高程序执行速度和资源利用率。
440 0

热门文章

最新文章