Будет ли многопоточное Java-приложение очень хорошо использовать многоядерный компьютер? - PullRequest
2 голосов
/ 30 октября 2009

Если я напишу многопоточное Java-приложение, будет ли JVM заботиться об использовании всех доступных ядер? Должен ли я сделать какую-то работу?

Ответы [ 4 ]

10 голосов
/ 30 октября 2009

Если вы не используете JVM с так называемыми "зелеными" потоками (что в наши дни очень мало), потоки Java запускаются потоками ОС, поэтому по умолчанию несколько потоков запускаются на разных ядрах.

4 голосов
/ 02 ноября 2009

Чтобы продолжить, я вижу 100% -ное использование на обоих ядрах, когда запускаю этот код на моем двухъядерном ядре. Если я приведу количество потоков от двух до одного, одно ядро ​​перейдет на 100%, а другое - на 4%.

package test;

import java.util.ArrayList;

public class ThreadTest
{
    public void startCPUHungryThread()
    {
        Runnable runnable = new Runnable(){
            public void run()
            {
                while(true)
                {
                }
            }
        };
        Thread thread = new Thread(runnable);
        thread.start();     
    }

    public static void main(String[] args)
    {
        ThreadTest thread = new ThreadTest();
        for (int i=0; i<2; i++)
        {
            thread.startCPUHungryThread();
        }
    }
}
2 голосов
/ 02 ноября 2009

Все современные JVM будут использовать столько же ядер, сколько и ваше оборудование. Простой способ проиллюстрировать это - загрузить и запустить тест DaCapo на своем компьютере. Тест lusearch использует 32 потока. Если вы запустите это на своем рабочем столе или сервере, вы увидите, что все ваши процессоры достигли 100% загрузки во время теста.

0 голосов
/ 01 ноября 2009

С другой стороны, иногда полезно «привязать» / установить сходство для процесса Java, чтобы он использовал только набор ядер / сокетов, хотя это делается через семантику ОС. Как уже было сказано ранее, в большинстве сред времени исполнения действительно используются все процессоры, а приложения с высокой степенью загрузки могут потреблять больше ресурсов, чем можно было ожидать.

...