簡體   English   中英

Java多線程-return語句花費太多時間

[英]Java Multithreading - return statement taking too much time

在多線程(Executor框架)中,x()方法中所有時間打印的總和與doPerform打印的總時間不匹配。 隨着線程池中線程數量的增加(最多20秒),這種差異會繼續增長。 有人可以找出原因嗎? 有什么方法可以減少從x方法返回的時間嗎?
我已經測試過:

a)500份提交給執行人(poolsize = 100)
b)500個提交給執行者的文件(poolsize = 300)
c)300個提交給執行者的文件(poolsize = 100)

public void x() {
    long startTime = System.currentTimeMillis();
    for (long l = 0; l <= 10000000; l++) {
        if (l % 1000000 == 0) {
            System.out.println("Thread id: "
                    + Thread.currentThread().getId() + "\t"
                    + (System.currentTimeMillis() - startTime));
            startTime = System.currentTimeMillis();
        }
    }
}

public void doPerform() {
    long startTime = System.currentTimeMillis();
    x();
    System.out.println("Thread id: " + Thread.currentThread().getId()
            + "\t" + (System.currentTimeMillis() - startTime));
}

那是意料之中的。 您有100或300個並行線程正在執行,只有1,2或4個內核可以全部執行(除非您在巨型超級計算機上運行)。 這意味着為每個線程分配了一些CPU時間,然后分配了另一個線程,然后分配了其他線程,等等,給人以並行執行的錯覺。 但是實際上,各種線程的指令是交織並順序執行的。

因此,您可以在doPerform()執行線程AstartTime計算,然后可以在CPU上將該線程替換為其他幾個線程。 在線程調度程序將A重新分配給CPU並執行x()startTime計算之前,可能要經過幾毫秒。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM