【问题标题】:Replacing the task scheduler in Java with a custom-built one用定制的替换 Java 中的任务调度器
【发布时间】:2013-06-28 06:02:58
【问题描述】:

我正在研究一个与调度程序和虚拟机有关的主题。我昨天问了this question,我想知道在Java中是否可以这样做。 然后,我想知道是否可以更改将任务映射到 Java 中真正的 OS 线程的任务调度程序。谢谢。

【问题讨论】:

  • java中的“任务调度器”是什么?
  • @jtahlborn:哈。只是假设 Java 有一个基于任务的并行模型......它没有? (!)所有线程与操作系统线程都是 1:1 的吗?
  • 线程与几乎所有现代 jvm 中的 OS 线程都是 1:1。有带有任务/参与者概念的第三方库(如 akka),但 jdk 内置的不多(我猜 jdk 7 有 fork/join 框架)。因此,为了回答您的问题,您必须选择一个特定的任务框架。
  • @jtahlborn:让我们假设 util.java.concurrent 中的线程池......那里的调度是什么?
  • 操作系统,就像我说的。 java 线程与 OS 线程是 1:1 的。

标签: java multithreading


【解决方案1】:

On Linux there is a one to one mapping of Java threads to operating system threads。所以在 Linux 上,Java 线程调度器就是内核调度器。因此,要更改 Java 线程调度程序,您必须更改内核。我相信 Linux 有几个选项可以改变内核调度程序的行为,这可能足以满足您的需要。

如果您真的试图不使用该一对一映射,则必须更改 JVM。

由于 Linux 内核和 JVM(Open JDK 版本)都是开源的,这在技术上是可行的,尽管需要做很多工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 2014-04-14
    • 2021-10-15
    • 2012-07-27
    • 2017-03-15
    • 2014-07-08
    • 2011-07-02
    相关资源
    最近更新 更多