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();
}
}
}