进程和线程的区别和联系

本文介绍了进程和线程的基本概念,进程作为操作系统分配资源的单位,线程则是执行流,用于实现并发编程。线程相比进程更轻量级,创建和调度更快。多线程在同一进程内共享内存,而进程间不共享。线程池和协程进一步优化了资源管理和执行效率。总结了进程与线程的区别,并强调了它们在多核CPU和IO等待场景下的重要性。
摘要由CSDN通过智能技术生成

一. 进程和线程的基本概念

进程

进程(Process)是操作系统分配资源的基本单位,⼀个进程拥有的资源有⾃⼰的堆、栈、虚存空间(⻚表)、⽂件描述符等信息。 从编程的⻆度来理解进程,可以把它看作是⼀个类或⼀个 PCB
(Process Control Block)进程控制块的结构体

进程是操作系统分配资源的最小单位。

线程

1.线程是什么

一个线程就是一个 "执行流". 每个线程之间都可以按照顺讯执行自己的代码. 多个线程之间 "同时" 执行着多份代码.

举个例子:

假设今天你家里来客人了, 然后决定做一桌子好吃的饭菜招待客人, 然后家里妈妈的厨艺最好, 所以让妈妈来做饭, 但是这个时候一个人肯定会忙不过来, 所以妈妈久找你和你爸来帮忙, 一个人洗菜切菜, 一个人炒菜, 一个人招待客人. 三个人分别负责一个事情,自此就有了三个执行流共同完成任务,但本质上你们都是为了招待好客人. 

此时,我们就把这种情况称为多线程,将一个大任务分解成不同小任务,交给不同执行流就分别
执行. 其中你和你爸爸都是你妈妈叫来的,所以妈妈一般被称为主线程(Main Thread)。

2.为啥要有线程呢?

首先: "并发编程" 成为 "刚需"

  • 单核 CPU 的发展遇到了瓶颈. 要想提高算力, 就需要多核 CPU. 而并发编程能更充分利用多核 CPU资源.
  • 有些任务场景需要 "等待 IO", 为了让等待 IO 的时间能够去做一些其他的工作, 也需要用到并发编程.

其次, 虽然多进程也能实现 并发编程, 但是线程比进程更轻量.

  • 创建线程比创建进程更快.
  • 销毁线程比销毁进程更快.
  • 调度线程比调度进程更快.

最后, 线程虽然比进程轻量, 但是人们还不满足, 于是又有了 "线程池"(ThreadPool) 和 "协程"
(Coroutine)

二.进程和线程的区别

  1. 进程是包含线程的. 每个进程至少有一个线程存在,即主线程。
  2. 进程和进程之间不共享内存空间. 同一个进程的线程之间共享同一个内存空间.
  3. 进程是系统分配资源的最小单位,线程是系统调度的最小单位.

不同点:

  1. 从属关系不同:线程属于进程,而进程不属于线程。
  2. 描述的侧重点不同:进程是系统分配资源的最小单位,而线程是系统调度的最小单位。
  3. 共享资源的方式不同:进程之间是不能共享资源的,线程之间可以共享资源。
  4. 上下切换的速度不同:进程的上下文切换比较慢,而线程上下文切换的速度是比较快的。
  5. 操作对象是不同的:进程是由操作系统操作的,而线程是咱们程序员可以编码进行操作的。
  6. 进程的创建/销毁/调度开销大,线程的创建/销毁/调度开销相对少很多。
  7. 多个进程同时执行时,如果一个进程崩溃,一般不会影响其他进程,而同一进程内的多个线程之间,如果一个线程崩溃,很可能使得整个进程崩溃。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

即将秃头的菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值