【问题标题】:Context switching in JavaJava中的上下文切换
【发布时间】:2018-09-28 05:01:23
【问题描述】:

在多线程 Java 应用程序中,如果我想确定上下文从一个线程切换到另一个线程的指令,最好的方法是什么?检测每条指令以识别哪个线程正在执行该指令将给出一个接近的近似值。例如,如果切换发生在检测执行之后和实际指令之前。被执行,那么结果将是不精确的。

  • 有没有办法在 Java 中精确识别上下文切换位置(不同的运行会有所不同)?

  • 识别这一点最经济有效的是什么?

【问题讨论】:

  • 您不能在 Java 代码中执行此操作。您应该能够使用分析器挂钩来完成此操作。愿意解释为什么您需要这些信息吗?
  • 我担心你不了解线程或上下文切换。该功能由 JVM 和操作系统联合执行。特别是上下文切换可能由操作系统在与互斥相关的调用中执行(例如,Linux 上的futex)。 Java 无法控制这一点。虽然可以编写自己的上下文切换应用程序(将堆栈保存在应用程序中间)来模拟线程,但除了自我教育之外没有实际需要这样做(但我已经去了那里,它非常有启发性 - 但不是在 Java 中,它是 C 和汇编程序)。
  • @Gray:我需要这样做来执行一些分析。 PP:感谢您对我对线程的理解。

标签: java multithreading scheduling


【解决方案1】:

您的问题的简短答案是You can not do it in java。JVM 负责根据底层操作系统和内存模型切换上下文。

http://en.wikipedia.org/wiki/Thread_(computing)

【讨论】:

  • 不是操作系统负责上下文切换线程如提到here
【解决方案2】:

大多数上下文切换是由外部中断(包括定时器)引起的。它可以发生在any 指令中。事实上,分布并不均匀,而是非常随机。即使您可以收集每条指令的上下文切换的概率分布,您将如何使用它?看起来你试图用不充分的手段解决一些问题。最好告诉您真正的问题是什么,我们会尝试提出解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 2021-07-18
    • 2021-04-07
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    相关资源
    最近更新 更多