在Java中使用并行性会使程序变慢(慢四倍!!!)

我正在写共轭梯度法实现.

我使用Java多线程进行矩阵反向替换.
使用CyclicBarrier,CountDownLatch进行同步.

为什么需要这么多时间来同步线程?
还有其他方法吗?

代码段

private void syncThreads() {

    // barrier.await();

    try {

        barrier.await();

    } catch (InterruptedException e) {

    } catch (BrokenBarrierException e) {

    }

}

解决方法:

总共使用了多少个线程?这可能是你问题的根源.在以下情况下,使用多个线程只能提高性能:

>线程中的每个任务都会进行某种阻塞.例如,等待I / O.在这种情况下使用多个线程可以使其他线程使用阻塞时间.
>或您有多个核心.如果您有4个内核或4个CPU,则可以同时执行4个任务(或4个线程).

听起来你并没有在线程中阻塞,所以我的猜测是你使用的线程太多了.例如,如果您使用10个不同的线程同时执行工作但只有2个核心,则可能比按顺序运行所有任务要慢得多.通常启动线程数等于核心/ CPU数量.每次增加缓慢使用的线程.这将为您提供最佳的线程数.

上一篇:json,pickle


下一篇:通过锁定在Java中实现线程安全的ArrayList