23. Como definir o número máximo de threads de núcleo no pool de threads (com uso intensivo de CPU, uso intensivo de E/S)

Como definir o número máximo de threads principais no pool de threads (com uso intensivo de CPU, uso intensivo de E/S)

 

Programação simultânea: (simultânea/paralela)

Simultaneidade: vários threads operam no mesmo recurso

Paralelismo: vários threads executados juntos (pool de threads pode ser realizado) o paralelismo é o mais eficiente

Pergunta: Como definimos esse número máximo de threads principais?

 

Idéia 1, CPU intensiva: De acordo com o número de núcleos da CPU (o número de núcleos é definido como alguns), a eficiência da CPU pode ser mantida no nível mais alto!

Como obter o número de núcleos da CPU:

Método 1. Verifique nosso gerenciador de tarefas, verifique o desempenho, cpu (12 núcleos)

 

Método 2. Abra o gerenciamento do computador, verifique o gerenciador de dispositivos e conte quantos processadores existem (12)

 

! ! ! Método 3. É melhor não escrevê-lo até a morte. Se a operação e a manutenção executarem o servidor, o número de núcleos do servidor deve ser maior que o nosso, então usamos java Api para obtê-lo (Runtime.getRuntime(). availableProcessors()), então aqui nós substituímos Down.

 

Idéia 2, IO-intensive: Determine os threads que consomem muito IO em nosso programa. (Desde que seja maior que esse número, tudo bem)

 

package org.example.threadpoolexecutor;



import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;



public class TestThreadPoolExecutorThere {

    public static void main(String[] args) {

//        ExecutorService threadPool = Executors.newSingleThreadExecutor();//单个线程的线程池

//        ExecutorService threadPool = Executors.newFixedThreadPool(5);//设定固定线程个数的线程池

        ExecutorService threadPool = Executors.newCachedThreadPool();//可以随着使用的线程个数变化而而变化的线程池

        try {

            for (int i = 1; i <=100 ; i++) {

                    threadPool.execute(()->{

                        System.out.println(Thread.currentThread().getName()+"=>ok");

                    });

            }

        } catch (Exception e) {

            throw new RuntimeException(e);

        } finally {

            threadPool.shutdown();

        }

    }

}





Acho que você gosta

Origin blog.csdn.net/logtcm4/article/details/127886996
Recomendado
Clasificación