java多线程-2-概念和实现机制

      知其然,而知其所以然!

      在计算机领域,有多种操作系统,常见的有windows家族和unix/Linux家族,它们都支持多任务的计算模式。

      它们实现多任务的机制是差不多的,这点在<<操作系统原理>>上已经说得很清楚了。当然不同的OS在具体是线上可能有一些细微区别,但最终总是殊途同归。

      这里主要阐述linux操作系统的多任务的实现机制,最后稍微提下windows的多任务实现机制。

      限于篇幅,只讨论单台计算机的并发。

     

      统一的例子 

      为了便于统一理解,本文以以下内容为例子:

      有绝世高手叫冷月轮流,绝技是“时不我待”。

      为何叫“时不我待”,她是这么说的:“因为我特别喜欢手工,恨不得时时刻刻都在做手工。为了有更多时间做手工,我必须有稳定的收入,

 为了有稳定的收入,我必须有一种高效的赚钱方式。想来想去,就是做杀手。暗器无疑是最佳的工具之一,它可以瞬时终结目标,且让我无声无息地脱离危险。时不我待可以保证百分百

 ,闪电般终结目标,之后我就可以回去做我喜欢的事情-手工!”。

      冷月轮流对外公布了一个特别的规定:只解决一群,不论强盗还是土匪。

      她不担心收不到报酬。因为从来没有人不主动給报酬,当然也因为她的顾客都是不差钱的主。

      因为只针对不法分子,所以民间对她颇有好评;而恶人对她恨之入骨,但又无可奈何。

      有时候,她心情好的时候,会发一块牌,名为“春日”。得到“春日”的人都可以让她免费提供一次服务,服务过后,她会收回。

      通常她一年才发一次“春日”。一来她时间不够,二来,许多时候她心情并不好,因为她都沉浸在忘我做手工的境界中。

    

      为何要有多任务

      这个好理解,我们要处理的事情太多了,希望快一点,再快一点。譬如搬砖头,一个人不够,再派一个,2个不够,上4个,8个,16个.....。多多益善。

      事情那么多,所以希望计算机业能够同时处理多个事情(任务)。

      冷月轮流每次都解决一窝坏蛋,当然要解决的越快越好。而她的“时不我待”就非常合乎时宜,一瞬间解决10个人不是问题。

      多任务的不同形式

      平常我们觉得计算机可以同时处理多个任务,这个感觉是真的。不过具体实现上,还是有区别的。

  • 可能是错觉

      有时候计算机繁忙,或者有的cpu比较弱(只有一个内核),那么这种多任务并发更多是一种错觉,不是真正的多任务。

      简单来说计算机比人快太多,差了好多量级。假设人计算一个算术题要一秒,而计算机只需要2纳秒,所耗费的时间是人的5亿分之一。

      理论上一秒钟,有的计算机的一个cpu内核可以计算5亿次的,甚至更多。计算机的所处理任务,归结起来主要就是:cpu,I/O和网络。甚至可以简化为CPU和I/O。

      简化下,假设都是cpu,那么一秒内计算机就可以做好多事情,而对于人而言,都是一秒内发生,感觉起来没有什么差异。

      换言之,计算机cpu利用自己巨大的速度差异,把自身的时间划分为多个部分,分别执行多个任务(计算),从而让人产生并行的错觉。

      操作系统的这种行为,有时候也称为“时间分片”。

      所以,这种多任务对于人是多任务,而对于计算机而言并不是真正的多任务,对于计算机而言,仅仅是因为它们太快了。

     

      “时不我待”有两种招式,其中一种是“弹式”,就是利用食指把暗器弹出。冷月轮流利用“弹式”,可以在瞬间弹出多个致命的暗器。

      绝大部分情况下,她都只用“弹式”,因为它威力更大,更准确;因此,也能更加节省制作暗器的时间。

  •      一个好汉三个帮

       如果任务非常多,那么一个内核可能不够,这个时候就需要多几个内核。这就是真真正正,实实在在的多任务。

       有的时候,目标特别多,冷月轮流不得不两只手一起用。妙的是,她左右两手基本一样,无论力道,速度,准确地。

      计算机是如何实现多任务

      前文说过,计算器本身有两大核心构成:cpu+I/O。I/O可以理解为存储+网络+外设。

      事实上,计算机越来越复杂,许多外设本身也有计算能力,譬如显卡,磁盘。

      单台计算机有两种多任务模式:时间分片,多核并行。       

     

     

原文地址:https://www.cnblogs.com/lzfhope/p/12992429.html