【问题标题】:How does multiple threaded application works in multi processor system多线程应用程序如何在多处理器系统中工作
【发布时间】:2019-06-05 08:25:01
【问题描述】:

假设我们有一个游戏应用程序,其中汽车、自行车和塔钟在单独的线程中并行运行。

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

假设游戏在双核手机上运行。

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

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

【问题讨论】:

  • 这是操作系统实现细节以及游戏引擎实现细节。一般来说,这是可能的,但取决于游戏构建的引擎以及您运行的操作系统。

标签: java multithreading operating-system multicore


【解决方案1】:

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

是的,有可能。这取决于 JVM 实现(因为您提到了 Java)和 OS 实现,所以不能保证,但有可能。

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

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

JLS chapter 17:

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

【讨论】:

    【解决方案2】:

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

    即使在单核机器上,线程也可以运行concurrently。并发运行是使用线程的重点。

    如果你知道你的程序永远只能在单处理器平台上运行,那么你或许可以不尊重 Java 的memory model,但线程安全的基本规则——哪些需要锁定,哪些不需要锁定——在任何一种情况下都是一样的。

    ...还有一个钟楼

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

    P.S.:在许多应用程序中,也没有理由为单个汽车、自行车或其他 MOB 使用专用线程;但我不知道你的申请,所以我不能对此发表评论。

    【讨论】:

    • 在单核上,您一次只能执行一条指令,我认为您在这里混淆了。 “汽车线程和自行车线程是否有可能在任何时间点同时运行?”不像“我可以在单核 CPU 上运行多个线程吗?”。
    • @IvanKaloyanov,我认为我们应该在这次谈话中避免使用“同时”这个词。它可以表示两种不同事物中的任何一种。如果我们指的是一件事,我们就说“并发”,如果我们指的是另一件事,我们就说“并行”。我不想在这里覆盖 Etienne Miret 的回答:我只是想添加一些东西。也就是说,如果您试图证明您的程序是“线程安全的”,那么目标平台是否有一个或多个处理器并不重要。大多数线程安全问题是由于线程同时运行
    • 我同意你的看法。
    猜你喜欢
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多