CPQ与线程关系的思考

并行:相当于我们军训时走方正队,大家急头并进。、
并发:假设一下我们正在使用微信和姑娘聊天。并发就相当于你疯狂地切屏,同时跟十个姑娘谈人生。
串行:
所以,通过类似,我们明白了,并发实际上就是一个海王。
下面,我们接着聊海王的问题,不,是多线程的问题。
在聊多线程这个问题之前,我们先聊一下另外一个问题,就是PC寄存器。我们都知道,PC寄存器是线程私有的,每一个线程都独占一份PC。在PC上,存储了下一条指令的地址。
我们假设这样一个场景:
我们通过Java在一个单核的操作系统上开启了三条线程,Java每创建一条线程,相应的,在操作系统层面也会跟着创建一条线程。所以,现在的局面是,一个CPU,三条线程。
因为是单核,所以我们的CPU会疯狂地在这三条线程之间切换。A执行了一会,接着又去执行B,B执行了一会接着又去执行C(实际情况可能不是这样有序执行的,我们先假设是有序执行的,关于这个点,并不会影响我们接下来要聊的内容)
并发的这三条线程真的会提高程序的运行效率吗?
回到海王的这个问题上来:
在跟姑娘聊天的时候,我们给姑娘A发出一条消息,姑娘A阅读完消息之后,接着开始打字,打完字再发送给你,姑娘打字的时候,实际上就是你等待的时间。
如果是这种场景,很明显,并发是效率更高的方式,在姑娘A打字的时候,你马上去跟姑娘B聊,在姑娘B打字的时候,你又马上去跟姑娘C聊。
如果这个时候是单线程会是什么场景,就是你发完消息,干巴巴等姑娘回你消息。
从聊天上来看,海王是效率更高的聊天方式。
所以,这种情况下,即便是单核,使用并发也是可以提升效率的。但是这里有一个前提,就是CPU的使用率。我们应该将线程数控制在CPU使用率在100%以内。如果超过了,就好比,让你一口气聊一万个姑娘,你还能聊出个啥玩意来?
这里的聊姑娘,实际上就是我们计算机中的IO操作。IO操作就存在这样的等待时间,具体的原因,我就不细说了,这个已经到硬件层面了,不是我们程序员关注的点。我简单地举个例子,磁盘控制器在读取的时候,实际上是串行逐行读取的。
如果,姑娘回消息的速度是光速,这个时候,即便你开启了,也没有什么实质性的作用,不能不能提高效率,反而会导致效率下降,因为开启线程也是存在资源消耗的。
姑娘光速回消息对于这我们计算机的场景就是运算,
接着我们再聊一个多核。我们假设是八核的,八核的就相当于你,除了你自己以外,你还有七个影分身。你能做的时候,你的分身都能干,它可以完全取代你。
还是回到聊姑娘的问题,八个你,如果姑娘回消息慢吞吞的话,你可以选择同时跟一百个姑娘聊。
如果姑娘是光速回复的话,八个你,选择八个姑娘其实是更好的选择。
聊到这里,大家应该意识到了为什么PC寄存器在设计的时候是每一个线程独享一份了吧,因为CPU在切换的时候,它需要知道从哪里开始,接下来读取哪一行指令,编译成机器码,交给我们的硬件去处理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值