【问题标题】:How to use multiple cores with java?java如何使用多核?
【发布时间】:2016-08-30 08:43:00
【问题描述】:

我试图了解 java 线程如何与 CPU 内核一起工作。我有一个 4 核 CPU,当我尝试运行以下代码时,执行时间很有趣。为什么它不能用多个线程加速?我做错了吗?

availableProcessors() 顺便返回 4。

以下代码耗时近 27 秒;

        Runnable runnable = new Runnable() {
        @Override
        public void run() {
            int x = 0;
            while(x < 10000000){
                System.out.println(x);
                x++;
            }
        }
    };

    Thread t1 = new Thread(runnable);

    t1.start();

当我使用多个线程时,需要 33 秒;

Runnable runnable = new Runnable() {
        @Override
        public void run() {
            int x = 0;
            while(x < 5000000){
                System.out.println(x);
                x++;
            }
        }
    };

    Runnable runnable2 = new Runnable() {
        @Override
        public void run() {
            int x = 5000000;
            while(x < 10000000){
                System.out.println(x);
                x++;
            }
        }
    };

    Thread t1 = new Thread(runnable);

    t1.start();


    Thread t2 = new Thread(runnable2);

    t2.start();

【问题讨论】:

标签: java multithreading


【解决方案1】:

您的程序存在打印到终端的顺序瓶颈。

System.out.println 中有一个同步块,因此一次写入一个,因此您的代码不是并行的。

根据Amdahl's law,程序的顺序部分(包括协调)控制其性能

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-03
    • 2015-04-18
    • 1970-01-01
    • 2011-08-03
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    相关资源
    最近更新 更多