线程概述

1、概念

要了解什么是线程,首先先了解什么是进程。进程是指一个正在进行的过程或任务。有些任务可以分成几个子任务同时进行,这几个子任务可以称为线程。比如做饭是一个进程,它可以简单的分为洗菜、切菜、蒸饭、炒菜四个线程。一个进程必须要有至少一个线程,如果所有线程都结束了,那对应进程也会终止,也就是洗菜、切菜、蒸饭、炒菜四个线程都完成了。那么这顿饭就做好了。

2、线程的调度

线程在执行时需要占用CPU资源,而一个CPU在一个时间段只能做一件事情,因此即使一个进程分为多个线程,这些线程在占用CPU资源时实际上也只能排队使用,只不过CPU把时间切分得足够细,可以使线程快速切换,造成线程是同时进行的假象。还是比如做饭这件事,一个厨师就是一个CPU,而一个厨师不能同时进行上面的四个线程,只是当厨师把任务时间切碎,在把菜放进锅里的瞬间切换到切下一道菜的任务,等锅里的菜需要翻炒了又切换到炒菜这个任务,这样进行快速切换,造成了切菜和炒菜同时进行的“假象”,但是对于一个厨师来说,一次只能做一件事。所以在分配厨师的时间这件事上,就产生了线程调度这个问题。
线程调度分为分时调度和抢占式调度两种。分时调度指所有线程轮流使用CPU资源,平均分配CPU的时间。抢占式资源则按照线程的优先级分配资源,优先级相同的情况下随机让一个线程使用CPU资源。还是以炒菜为例,分时调度就是把厨师的时间分成几个时间段,比如厨师用第一个五分钟洗菜,用第二个五分钟切菜,第三个五分钟炒菜,第四个五分钟蒸饭。而抢占式调度则是先给任务划优先级,比如洗菜的优先级最高,那厨师就先洗菜,其他三个任务如果优先级一样,在厨师完成洗菜后,其他三个任务开始抢占厨师的时间,哪个抢到了厨师就做哪个任务。

3、同步与异步

同步是指线程是排队进行的,一个线程完成以后再进行另一个线程,这种做法效率虽然低但是安全。比如在做饭的时候,把所有的菜都洗干净了、切好,再炒好,然后才蒸饭,这样能保证所有菜都不会出现异常情况比如炒糊了,但是效率很低,如果有一道菜要30分钟才熟,在这个过程其实可以开始蒸饭了,而同步就是要等这道菜做好了才可以开始蒸饭。
异步是指线程是“同时”执行的,这里的同时是指CPU的时间被切分为很多个时间段,每个时间段执行一个线程,而这个线程即使没有执行完毕,下一个时间段也不一定会执行这个线程。它不是真正意义上的同时,因为CPU一次只能做一件事。也就是说厨师可以在炒菜进行到一半的时候去蒸饭了。这样的好处就是效率很高,但是安全性比较低。比如在蒸饭的时候,菜糊了。

4、并发和并行

区别并发和并行的关键是有几个CPU。上面文章已经多次强调一个CPU一次只能做一件事。并发是指只有一个CPU,但是可以在一个时间段内把CPU的时间分为好几个细分时间段,支持多个线程使用这个CPU,但是在一个时刻只能有一个线程在使用这个CPU。并行是指有好几个CPU,那么同一时刻每个CPU都处理一个线程,同一时刻就能有好几个线程在同时进行。比如做饭的例子,如果只有一个厨师,再怎么分厨师的时间,他在一个时刻也只能做上面四个任务的其中一个,但是如果有四个厨师,在一个时刻,这四个厨师可以同时进行四个任务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值