多线程应用程序如何在多处理器系统中工作

时间:2019-06-05 08:25:01

标签: java multithreading operating-system multicore

让我们拥有一个游戏应用程序,其中汽车,自行车和塔式时钟在各个线程中并行运行。

我们知道一次只能运行一个线程。 (上下文切换非常快地发生在线程之间,这使得它看起来像在与人眼平行运行)

让我们假设游戏正在双核手机中运行。

移动处理器的两个内核会共享3个线程吗?

汽车线和自行车线是否有可能在任何时间点同时运行?

2 个答案:

答案 0 :(得分:2)

  

汽车线和自行车线是否有可能在任何时间点同时运行?

是的,有可能。它取决于JVM实现(自从您提到Java以来​​)和OS实现,因此它不是必需的,但是有可能。

  

我们知道一次只能运行一个线程。 (上下文切换非常快地发生在线程之间,这使得它看起来像在与人眼平行运行)

错了。在单核单处理器上是正确的,在某些JVM / OS上也可能如此,但是在一般情况下是错误的。

请参见JLS chapter 17

  

可以通过具有多个硬件处理器,对单个硬件处理器进行时间切片或对许多硬件处理器进行时间切片来支持线程。

答案 1 :(得分:0)

  

汽车线程和自行车线程是否有可能在任何时间点同时运行?

即使在单核计算机上,线程也可以运行 concurrently 。同时运行事物是使用线程的全部重点。

如果您知道您的程序只能在单处理器平台上运行,那么您也许可以摆脱对Java的 memory model 的蔑视,但是线程的基本规则安全-什么需要锁定,什么不需要-在两种情况下都是相同的。

  

...还有塔钟

确实没有理由使用专用线程为时钟设置动画。时钟是绝对可以预测的。它的外观是当前时间的函数,仅此而已。

P.S .:在许多应用程序中,也没有理由对单个汽车,自行车或其他MOB使用专用线程;但我不知道您的应用程序,因此无法对此发表评论。