进程与线程的区别和联系

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

🔎进程

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

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

进程

🔎线程

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

🔎进程与线程的联系

进程包含线程

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

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

举个栗子🥝

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

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

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

🔎进程与线程的区别

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

举个栗子🥝

滑稽老哥家里是做生意的

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

这时候滑稽老哥比较为难

他有两个选择

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

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

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

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

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

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

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

对于上述描述

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

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

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

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


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

解释

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

这主要体现在资源分配上

比如分配内存时

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

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

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

所以进程是重量的

而对于线程来说

由于线程是进程的一部分

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

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

所以

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

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

想象一下

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

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


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

举个栗子🥝

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

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

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

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

感觉吃的还是比较慢

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

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

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

可能产生问题

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

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

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

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

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

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

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

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

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

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

🔎总结

🔎 结尾

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

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

相关文章
|
19小时前
|
大数据 API 数据处理
Python高手都在用的并发秘籍:解锁线程与进程的终极奥义,性能飙升不是梦!
【7月更文挑战第8天】Python并发编程提升性能,线程(threading)适合I/O密集型任务,如网络请求,通过`start()`和`join()`实现并发。进程(multiprocessing)利用多核CPU,适用于CPU密集型任务,如大数据处理。结合两者可优化混合任务,实现最佳并发效果。
5 1
|
3天前
|
消息中间件 安全 Java
线程和进程的区别及应用场景
线程和进程的区别及应用场景
|
19小时前
|
数据处理 开发者 Python
别再盲目编码!一文读懂Python线程与进程的使用场景与限制,助你成为并发编程高手!
【7月更文挑战第8天】Python并发编程提升效率,关键在于理解线程和进程的适用场景。I/O密集型任务如Web服务器适合用线程,示例展示了使用`threading`处理HTTP请求。CPU密集型任务则利用`multiprocessing`创建进程,绕过GIL限制,实现多核利用。注意线程的GIL限制和进程的开销,选择合适模型以优化并发性能。
4 0
|
19小时前
|
API 数据库 C++
震惊!Python并发编程大揭秘:线程(threading)VS进程(multiprocessing),你选对了吗?
【7月更文挑战第8天】在Python并发编程中,线程适合I/O密集型任务,如实时订单处理,而进程适合CPU密集型任务,如商品信息同步。线程利用轻量级并发,处理I/O等待时切换成本低;进程通过multiprocessing模块充分利用多核CPU。根据任务类型选择合适工具,能提升效率并优化系统性能。理解和运用线程与进程,是解决并发问题的关键。
7 0
|
3天前
|
Java 调度 Windows
Java面试之程序、进程、线程、管程和并发、并行的概念
Java面试之程序、进程、线程、管程和并发、并行的概念
8 0
|
11天前
|
开发框架 安全 .NET
技术好文共享:进程和线程的区别
技术好文共享:进程和线程的区别
12 0
|
11天前
|
开发框架 安全 .NET
程序技术好文:进程和线程的区别
程序技术好文:进程和线程的区别
|
11天前
|
存储 测试技术
【工作实践(多线程)】十个线程任务生成720w测试数据对系统进行性能测试
【工作实践(多线程)】十个线程任务生成720w测试数据对系统进行性能测试
19 0
【工作实践(多线程)】十个线程任务生成720w测试数据对系统进行性能测试
|
12天前
|
数据采集 Java Unix
10-多线程、多进程和线程池编程(2)
10-多线程、多进程和线程池编程
|
12天前
|
安全 Java 调度
10-多线程、多进程和线程池编程(1)
10-多线程、多进程和线程池编程