反正有没有在Windows上找出java时间片?

时间:2010-09-12 22:35:14

标签: java multithreading time

我知道jvm timeslices线程,至少在windows上。 无论如何我可以找出默认的时间片是什么,或者改变时间片吗?

我想到的一种方法是编写自己的循环调度程序并将其作为高优先级的线程运行,并让它控制所有其他线程。那会有用吗?

2 个答案:

答案 0 :(得分:4)

实际上,除非您使用的是使用“绿色线程”的JVM,否则最终会进行线程时间切片和线程调度的操作系统。如果您需要修改计划等行为,请首先查看操作系统提供的设施。

  

我想到的一种方法是编写自己的循环调度程序并将其作为高优先级的线程运行,并让它控制所有其他线程。那会有用吗?

没有保证。这取决于OS'线程调度程序对线程优先级的变化的响应程度。

这种方法的其他问题(调整线程优先级)是:

  • 这将不可避免地使您的应用程序在调度程序和真实(黑盒子)线程调度程序之间的交互方面更具特定于平台,
  • 很难知道您的调度程序是否有效,
  • 它会使你的申请中的“heisenbugs”更难追踪。

为什么你认为有必要这样做?

答案 1 :(得分:1)

回答问题的第一部分。

我认为以下测试可以估算时间片。一般想法:在以下循环中运行N个线程(N> Runtime.getRuntime()。availableProcessors()):

    public void run() {
        long warmUp = 20000;

        long milli0 = System.currentTimeMillis();
        long nano0 = System.nanoTime();
        while (true) {
            long milli1 = System.currentTimeMillis();
            long nano1 = System.nanoTime();
            if (warmUp > 0) {
                warmUp--;
            } else {
                if (nano1 < nano0) {
                    log("WARNING: Nanotime goes back by " + (nano1 - nano0) + " ns");
                    warmUp = 20000;
                } else
                if (nano1 - nano0 > SPIKE) {
                    log("WARNING: Nanotime gap: " + (nano1 - nano0)/MILLIS_PER_NANO + " ms. System time delta: " + (milli1 - milli0) + " ms.");
                    warmUp = 20000;
                }

            }
            nano0 = nano1;
            milli0 = milli1;
        }
    }

结果将在很大程度上取决于平台。在我的Windows 2008 Server上,我得到5-15毫秒。

"The term "quantum" is a unitless measure of time for each time slice that a thread will run until a "context switch" occurs and another thread (either within the same program or from within another program) is selected to run. This prevents a CPU-bound process from monopolizing the processor. Currently in Windows, 3 quantums are equal to either 10 milliseconds (single processor) or 15 milliseconds (multiple-processor Pentium). This depends on the hardware abstraction layer (HAL) selected for your computer. Original Equipment Manufacturer (OEM) HALs may have a different value. Time slices that are fixed at 36 quantums are currently used when background services are selected (as you might choose in a typical server installation)."