进程or线程

1.什么是进程,线程及相关概念?

在操作系统中,一开始就会介绍进程,线程,这些概念,但对于刚接触的来说还是显得有些难以理。之前在网上看到一篇博客在描述操作系统中的概念做了个形象的比喻,很贴切。这里引用拓展一下:

计算机处理计算任务的主要硬件是CPU,CPU就好像一个工厂。

进程就是工厂的车间,如果工厂的供电有限,一次只能给一个车间开工干活,这个车间在干活的时候,其他车间就无法占用CPU,他们只能等待。这就是单核CPU只能每次只能处理一个进程的计算。至于多核的话,这个就好比他们又新建了一个供电系统,至于怎么使用心得供电,实际是由不同的工厂决定的,也就是取决于操作系统的设计。

进程间通信就好比两个不同的车间需要进行一些交流才能继续下去,当然这个交流就可能是一个工厂内的两个车间,也可以是不同工厂内的两个车间。不同的交流环境就可有不同的交流方式,也就是不同的多进程通信方式。

线程就是工人。每个工人都有自己的工位,床位,这种就好像是线程的,是每个线程独有的。当然了,除了每个独有的空间外,还有公共空间,这就好像是每个进程的空间。公共空间呢,也有一定的大小,换句话说,公共空间的容量不足也会出现等待的情况。不同公共空间的容量决定了可以容纳多少个人,换句话说就是具体的堆对象是有规定多少个线程可以一起进入的。打个比方说,休息室,休息室共9个位置,那就意味着一次最多只能进9个人,怎么保证最多9个人呢,这个时候就有门票的问题,只有9张门票,只有拿到门票的人才能进入,出来的人把门票归回以便下一个人借用。这就好比是多线程中的信号量,我们可以设置多少个线程拿到信号量。当然了,也有只能一个人使用的空间,比如厕所,这个就只能一个人去使用,那保证一个人使用的方法就是厕所门上的锁,进去的人把门锁上,这就像我们多线程的锁,当然在多线程中,实现这个锁的方法有很多,临界区,互斥锁等。除了上面两种空间外,我们想还有一种空间,车间公告牌,这个空间只允许一个人在上面写东西,写出来之后,就可以有很多人去看上面写的信息,所以这就好比多线程中一种特殊的锁,读写锁,可以有多个线程去读取,但写的时候只能有一个线程去操作。

当然了,除了上面工人们要去抢占位置,他们还需要相互交流,这就是线程间通信。他们相互交流的方式有很多,消息队列,管道,共享内存等。

2.进程在操作系统中是怎么工作的?

从上面举例可以看到,在单核CPU中,没有真正意义上的多线程,多进程,每次都只有一个进程在工作。实际上在CPU中,占用cpu的时间是以时间片来计算的,某个时间片只能有一个进程占用。那你可能会想,进程在一个时间片中可能没有操作完成怎么办?实际上,一个时间片的时间很短(取决于你的cpu的频率),你要在一个时间片中完成基本比较难,这样就意味着,需要不同进程轮换着来,当这个程序执行完了,或者分配给他的CPU执行时间用完了,那它就要被切换出去,等待下一次CPU的时间片。在被切换出去之前,它得保留现在操作的痕迹,以保证下次进来的时候知道自己操作到哪里了。你可能会觉得为什么要这么麻烦呢,每个进程进进出出的,还要保存上次的记录,实际上我们知道,CPU在处理一个计算的时候,需要数据,而这些数据来的速度又太慢了,换句话说,由于cpu处理的速度太快,而IO操作的时间又太慢,只能将数据准备好的换进来计算,计算完了换出去准备数据。所以一次进程的切换过长是:先加载上下文,然后进行计算,最后将上下文保存出去

所以进程,线程的概念:进程是CPU的执行路径,简单点说就是进程就是一个个运行的程序,线程是进程中真正占用资源的最小单元。也就是说线程不能脱离进程而单独存在,一个进程下面至少包含一个线程(主线程)。而多进程,多线程是为了解决cpu速度快于IO速度

 

想要了解更多java内容(包含大厂面试题和题解)可以关注公众号,也可以在公众号留言,帮忙内推阿里、腾讯等互联网大厂哈。

                                                                             

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值