【问题标题】:Multiple Cores and java多核和java
【发布时间】:2015-03-07 14:48:46
【问题描述】:

我刚刚阅读了“服务器如何处理多个请求”的内容,最终得到了 java 多线程和多核 cpu。

在计算机是单核的时代,如果同时在 java 中有 2 个线程,那么 jvm 调度程序将负责为每个线程分配时间。因此,两个线程永远不会并行运行,而是利用理想的时间(例如,如果一个线程在某个资源上被阻塞)。

但是这是否是 java7 中的多核和 fork/join 框架的情况? 我的意思是我听说使用多核我们实际上可以实现并行性。 所以,如果我有两个线程在运行,两个核心 cpu 并且每个线程都有一个单独的核心(虽然不能保证),那么它们实际上会是并行的,因为 jvm 调度程序仍然会导致时间交错?

如果这个问题很愚蠢,我很抱歉,但我真的不确定这个问题。请帮我理解!!

谢谢! 欧尼

【问题讨论】:

  • 线程调度实际上是委托给操作系统的。是的,操作系统会将线程分派到其所有内核,包括 Java 线程。
  • 您的问题是什么?您是在问多线程 Java 程序是否可以在多核平台上使用多个内核?如果是这样,纯粹理论上的答案是“取决于 Java 虚拟机,但对于任何 实用 JVM,答案都是“是”。
  • @jameslarge- 我要问的是,如果线程被分配给多个内核(每个内核一个线程),我们是否实现了真正的并行性?如果这是真的我很困惑,因为 jvm 调度器我们仍然轮流给时间(这表明两个线程永远不能并行运行)

标签: java multithreading


【解决方案1】:

问题是仍然很难理解有多少线程、内核……实际上是可用的。

我的个人建议:Java 专家时事通讯上有几篇文章对这个主题进行了非常深入的探讨。

比如这个:http://www.javaspecialists.eu/archive/Issue135.html

或者一个非常新的,关于“可用处理器的数量”:http://www.javaspecialists.eu/archive/Issue220.html

【讨论】:

    猜你喜欢
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 2015-04-18
    • 2016-04-13
    相关资源
    最近更新 更多