questões relacionadas com o conjunto de encadeamentos Java

Segmento pool de política de negar

  • AbortPolicy : direto jogado impedir que o sistema funcionando corretamente.
  • CallerRunsPolicy : Enquanto o pool de threads não está fechada, a política directamente no segmento do chamador, executar a tarefa atual é descartado.
  • DiscardOldestPolicy : descartar o pedido mais antigo, tente enviar o trabalho atual novamente.
  • DiscardPolicy : descarte não pode lidar com a tarefa, nem dado qualquer tratamento.
  • Se você quiser personalizar a interface para rejeitar estratégia pode alcançar RejectedExecutionHandler

Como usar um pool de bom fio

O número de configurações de tamanho de rosca

De computação intensiva

  • Como o nome sugere é a aplicação requer uma grande quantidade de recursos de computação CPU, multi-core era CPU, temos que deixar que cada núcleo da CPU estão envolvidos no cálculo, o desempenho da CPU totalmente utilizada, este não é considerado um desperdício de configuração do servidor, se você configurar um muito bom servidor também em execução em um programa single-threaded que será apenas como resíduo uma grande
  • Para aplicações de computação intensiva, a obra inteiramente sobre o número de core CPU, por isso, a fim de torná-lo desempenhar plenamente as vantagens, evitar a troca de contexto fio excessiva, a solução ideal é: o número de linhas = número um núcleo da CPU , também pode ser definido como número do núcleo da CPU * 2 , mas depende da versão do JDK, e as configurações da CPU (CPU do servidor tem Hyper-threading)

IO-intensiva

  • É bem compreendido, e acima de tudo que estamos fazendo para desenvolver aplicações web, envolvendo grandes quantidades de tráfego de rede, não só isso, com o banco de dados, interação entre o cache e também envolve IO, IO uma vez ocorrido, em um segmento irá aguardar estado, quando o fim IO, os dados estão prontos, o segmento continuará
  • Portanto, pode ser encontrada aqui para aplicações intensivas de IO, podemos definir o número de multi-threaded parte do pool de threads, de modo que podemos fazer neste momento para esperar por IO, o fio pode fazer outras coisas, para melhorar a eficiência de processamento simultâneo. Em seguida, a quantidade de dados que não é thread pool pode facilmente configurá-lo? Claro que não, certifique-se de lembrar que a troca de contexto fio a um preço
  • Actualmente resumiu uma fórmula para aplicações de uso intensivo de IO: tópicos = núcleos de CPU / (l factor de bloqueio) Este factor de bloqueio é geralmente 0,8 a 0,9, 0,8 ou 0,9 podem ser tomadas. Aplicar a fórmula para uma CPU dual-core, que é o número ideal de threads é 20, é claro, não é absoluta, é necessário de acordo com a situação real para ajustar e negócio real: int final do poolSize = (int) (cpuCore / (1-0,9) )

parâmetros de configuração conjunto de encadeamentos

  • Use o pool de threads quando eles não são selecionados nenhum limite superior de itens de configuração. Primeiro, nós não usar nenhum pool de threads superior e definir a fila ilimitada ! Por exemplo, definir a fila set ilimitada newCachedThreadPool por causa de algumas circunstâncias imprevistas, o pool de threads sistema será anormal, levando a surtos tópicos situação ou fila de tarefas continua a se expandir, levando a falhas no sistema de exaustão de memória e exceções. Recomendamos a utilização dos primeiros princípios de um pool de threads personalizado para evitar este problema, que é o padrão no pool de threads
  • Definir um número razoável de threads, e passe o tempo ocioso para se recuperar , a ser definido de acordo com os ciclos de execução de tarefas específicas e tempo, evitar a recuperação frequente e criação , embora o nosso objectivo é usar o pool de threads é para melhorar o desempenho do sistema e taxa de transferência, mas também considerar sob a estabilidade do sistema , problemas de outra forma inesperados surgem será muito problemático
  • De acordo com a cena real, escolha adequada para a sua política de rejeição . Para compensar, não mexer com suporte mecanismo JDK compensação automática ! Tente usar táticas personalizados recusou-se a revelar todos os detalhes foram

Ligar o seu uso do comportamento incorporado

  • Use Hook, deixando o pool de threads para executar a trilha: ThreadPoolExecutor fornece um método gancho protegido tipo pode ser substituído, permitindo ao usuário a tarefa antes da execução e após a execução de fazer alguma coisa.
  • Podemos usá-lo para alcançar tal inicialização ThreadLocal, reunir estatísticas, tais como a exploração madeireira e outras operações. BeforeExecute tais como Hook and AfterExecute.
  • Há também um gancho pode ser usado quando a tarefa for concluída a execução lógica é permite ao usuário inserir, como rerminated. Se a execução do método gancho falhar, o trabalho da rosca interna irá falhar ou ser interrompido

Feche o pool de threads 

  • Quando o conteúdo do pool de threads não é citada e o número de threads de trabalho é 0, o pool de threads será encerrado. Também pode chamar o desligamento terminar manualmente o pool de threads . Se esquecer de chamar o desligamento, a fim de permitir que os recursos de rosca são liberados, também podemos usar KeepAliveTime e allowCoreThreadTimeOut para atingir seus objetivos! Claro, a abordagem prudente é usar uma máquina virtual Runtime.getRuntime (). AddShutdownHook método, mão para chamar o método close do pool de threads

 

Publicado 53 artigos originais · ganhou elogios 1 · vista 1006

Acho que você gosta

Origin blog.csdn.net/CHYabc123456hh/article/details/104739551
Recomendado
Clasificación