【发布时间】:2015-03-07 14:48:46
【问题描述】:
我刚刚阅读了“服务器如何处理多个请求”的内容,最终得到了 java 多线程和多核 cpu。
在计算机是单核的时代,如果同时在 java 中有 2 个线程,那么 jvm 调度程序将负责为每个线程分配时间。因此,两个线程永远不会并行运行,而是利用理想的时间(例如,如果一个线程在某个资源上被阻塞)。
但是这是否是 java7 中的多核和 fork/join 框架的情况? 我的意思是我听说使用多核我们实际上可以实现并行性。 所以,如果我有两个线程在运行,两个核心 cpu 并且每个线程都有一个单独的核心(虽然不能保证),那么它们实际上会是并行的,因为 jvm 调度程序仍然会导致时间交错?
如果这个问题很愚蠢,我很抱歉,但我真的不确定这个问题。请帮我理解!!
谢谢! 欧尼
【问题讨论】:
-
线程调度实际上是委托给操作系统的。是的,操作系统会将线程分派到其所有内核,包括 Java 线程。
-
您的问题是什么?您是在问多线程 Java 程序是否可以在多核平台上使用多个内核?如果是这样,纯粹理论上的答案是“取决于 Java 虚拟机,但对于任何 实用 JVM,答案都是“是”。
-
@jameslarge- 我要问的是,如果线程被分配给多个内核(每个内核一个线程),我们是否实现了真正的并行性?如果这是真的我很困惑,因为 jvm 调度器我们仍然轮流给时间(这表明两个线程永远不能并行运行)
标签: java multithreading