Discuss / Java / main方法我改了一下发现直接for循环运算所需时间为0不知道为什么,谁能帮忙解答一下

main方法我改了一下发现直接for循环运算所需时间为0不知道为什么,谁能帮忙解答一下

Topic source
public static void main(String[] args) throws Exception {    // 创建2000个随机数组成的数组:    long[] array = new long[2000];    long expectedSum = 0;    for (int i = 0; i < array.length; i++) {        array[i] = random();        expectedSum += array[i];    }    System.out.println("Expected sum: " + expectedSum);    // fork/join:    ForkJoinTask<Long> task = new SumTask(array, 0, array.length);    long startTime = System.currentTimeMillis();    Long result = ForkJoinPool.commonPool().invoke(task);    long endTime = System.currentTimeMillis();    System.out.println("Fork/join sum: " + result + " in " + (endTime - startTime) + " ms.");    startTime = System.currentTimeMillis();    long sum = 0;    for (long l : array) {        sum += l;    }    endTime = System.currentTimeMillis();    System.out.println("sum: " + sum + " in " + (endTime - startTime) + " ms.");}
//输出:
Expected sum: 9788366
split 0~2000 ==> 0~1000, 1000~2000
split 0~1000 ==> 0~500, 500~1000
split 1000~2000 ==> 1000~1500, 1500~2000
result = 2485485 + 2491717 ==> 4977202
result = 2391591 + 2419573 ==> 4811164
result = 4811164 + 4977202 ==> 9788366
Fork/join sum: 9788366 in 650 ms.
sum: 9788366 in 0 ms.

public static void main(String[] args) throws Exception {
    // 创建2000个随机数组成的数组:    long[] array = new long[2000];
    long expectedSum = 0;
    for (int i = 0; i < array.length; i++) {
        array[i] = random();
        expectedSum += array[i];
    }
    System.out.println("Expected sum: " + expectedSum);
    // fork/join:    ForkJoinTask<Long> task = new SumTask(array, 0, array.length);
    long startTime = System.currentTimeMillis();
    Long result = ForkJoinPool.commonPool().invoke(task);
    long endTime = System.currentTimeMillis();
    System.out.println("Fork/join sum: " + result + " in " + (endTime - startTime) + " ms.");
    startTime = System.currentTimeMillis();
    long sum = 0;
    for (long l : array) {
        sum += l;
    }
    endTime = System.currentTimeMillis();
    System.out.println("sum: " + sum + " in " + (endTime - startTime) + " ms.");
}

PeachLuis

#3 Created at ... [Delete] [Delete and Lock User]

我也是这样,我把初始的array长度设置成1000000,得到时间为4毫秒;比并行的143ms快这么多?

1. 我们写的实现里故意让它沉睡了一秒

2. 我们在操作里做了写语句输出等无关操作

3. 这个数量级还是不够大,我这边是把数组调整到 `2000_0000` 后实现反超

Fork / join sum: 99990549481 in 69 ms.
fori sum:        99990549481 in 94 ms.

抱歉,不是沉睡了一秒


  • 1

Reply