进程VS线程:撕开操作系统的并发外衣,90%开发者误解的核心真相

目录

进程的概念

线程的概念

进程和线程的区别

进程和线程的联系


进程的概念

每个应用程序运行于现代操作系统之上时,操作系统会提供一种抽象,好像系统上只有这个程序在运行,所有的硬件资源都被这个程序使用。这种假象是通过抽象了一个进程的概念来完成的进程可以说是计算机科学中最重要和最成功的概念之一

进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程;同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。

也就是说,电脑中的每个应用(如:微信、qq、qq音乐、浏览器等)在你双击打开之后,你看到这个应用打开了,可以看到它里面的内容了,但是你不知道它是怎么显示出来的,实际上在你双击打开的时候,后面会有一系列操作系统的操作,它会占用你的 cpu、硬盘、内存(硬件资源)等,而你只能看到这个应用打开了(这就是操作系统制造的假象)。

现在设想一个场景

有好几个打工人(牛马)要去银行办理业务,业务内容:将这个月的工资从工资卡中取出来,并将一部分工资存到自己的储蓄卡上,那么现在就是这些打工人各自要去完成处理各自的业务,他们各自的业务都是一样的,流程也可能是一样的,但是实际上他们所要办理的业务之间没有任何关联,因为没有人会把自己的钱存在别人的卡里。此时就可以把这种情况称为“多进程”。

线程的概念

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

现在回想一下上面的场景:

不过现在不是一个人去银行办理业务,而是一家公司要去银行办理业务,既要进行财务转账,又要进行福利发放,还得进行缴纳社保。

如果这家公司只有张三一个会计忙不过来,耗费的时间特别长。为让业务更快的办理好,张三又找来了两位同事李四和王五,这两个同事一起帮助他,三个人分别负责一个事情,分别申请一个号码进行排队,此时就是三个人共同完成这家公司的业务,那么现在就是三个执行流共同完成任务。

此时,可以把这种情况称为 “多线程”,将一个大任务分解成不同小任务,交给不同执行流共同完成,对于上述场景来说,其中李四、王五都是张三叫来的,所以张三一般称为主线程。

进程和线程的区别

  • 线程比进程更轻量。

创建线程比创建进程更快,销毁线程比销毁进程更快,调度线程比调度进程更快。

  • 进程和进程之间不共享内存空间。同一个进程的线程之间共享同一个内存空间。

比如之前的多进程场景中,每一个打工人来银行办理各自的业务,业务内容都是一样的,但是他们之间的票据肯定是不可能让别人知道的,否则自己的钱不就被其他人取走了么。而上面的多线程的场景中,也就是公司业务中,张三、李四、王五虽然是不同的业务,各自办理着自己需要办理的公司的业务,也就是他们是不同的执行流,但因为办理的都是一家公司的业务,所有票据是共享的,这个场景就验证了上面所说的。(这个就是多线程和多进程的最大区别)

  • 进程是系统分配资源的最小单位,线程是系统调度的最小单位。
  • 一个进程挂了一般不会影响到其他进程。但是一个线程挂了,可能把同进程内的其他线程一起带走(整个进程就崩了)。

还拿之间的场景来说,每一个打工人都去银行办理自己的业务,假如此时其中一个打工人卡密码忘了(也就是一个进程挂了),就没办法存钱或者取钱了,但是这并不影响其他打工人办理自己的业务,其他的打工人还是照样可以存钱、取钱。而三个会计去办理公司的业务,原本是只有张三一个会计去办理公司的业务,张三觉得自己的业务太过繁重,就又喊了另外的两个同事(李四和王五),相当于把张三的业务分成了三部分,这三部分由这三个会计共同完成,那么他们三个会计所要办理的业务就必然存在着联系,这时候,如果他们三个中的其中一个人的业务没有办理成功(也就是一个线程挂了),此时必然会影响到其他两个人的业务,那么这家公司的整个业务也就无法办理成功了(也就是整个进程崩溃了)。

  • 多线程常用于需要高响应的应用,如GUI;多进程则用于需要高稳定性的场景,如服务器,避免单个进程崩溃影响整体。

进程和线程的联系

  • 结构关系:进程是包含线程的。每个进程至少有一个线程存在,即主线程。

依旧是上面的场景(博主场景少,不要嫌弃),上面公司业务的场景,就是一个进程包含了三个线程,公司将整个业务(整个进程)交给了张三(主线程),张三业务繁重,喊来了其他两位同事李四和王五共同完成整个业务,张三把公司交给他的业务(整个进程)分成了三部分,张三处理一部分(主线程),李四和王五处理各自的一部分(其他两个线程)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值