Esta ideia de projeto Java é prática? (Agendador de threads e otimização de enxame de partículas)

StackOverflow https://stackoverflow.com/questions/3421415

Pergunta

Em uma caixa multicore, as decisões dos agendadores de threads Java são bastante arbitrários, atribui prioridades de threads com base em quando o tópico foi criado, a partir do qual foi criado etc.

A idéia é executar um processo de ajuste usando o PSO que definiria aleatoriamente as prioridades do encadeamento e, eventualmente, alcançaria prioridades ideais em que a função de condicionamento físico é o tempo total de execução do programa?

É claro que haveria mais parâmetros, como as prioridades mudariam durante a execução para encontrar uma função de prioridade ideal.

Quão prático, interessante a ideia soa? e quaisquer sugestões. Apenas alguns antecedentes, estou programando em Java/C/C ++ há alguns anos com vários projetos, outra alternativa seria fazer um agendador de threads com base nisso em C, onde o agendador de thread padrão é o sistema operacional.

Foi útil?

Solução

Melhor maneira de descobrir - inicie um projeto de código aberto e consulte o uso/reação das pessoas.

Parece muito interessante para mim - mas eu pessoalmente Não ache muito útil. Talvez não estejamos no ponto em que a programação simultânea é tão prevalente e fácil quanto poderia ser.

Com a promoção da programação funcional, acho que o mundo avançaria para evitar a sincronização do fio o máximo possível (tornando assim a programação de threads menos impacto no desempenho geral)

A partir da minha experiência subjetiva pessoal, a maioria dos problemas de desempenho no software pode ser resolvida, melhorando uma única área de gargalo que representa 90% da desaceleração. Este otimizador pode ajudar a descobrir isso. Não tenho certeza de quanto a estratégia de agendamento poderia melhorar o desempenho geral.

Não desanime, no entanto! Estou apenas falando do nada. Parece divertido, então por que não apenas brincar com isso de qualquer maneira :)

Outras dicas

Sua abordagem, conforme descrita, é uma abordagem estática, ou seja, você precisa executar o programa várias vezes e, em seguida, apresentar uma solução de agendamento e enviar suas informações de agendamento com o programa.

O problema é que, para a maioria dos programas não triviais, seu desempenho dependerá em parte dos dados específicos com os quais está trabalhando. Mesmo se você encontrar uma maneira ideal de agendar threads para um conjunto de dados, não há absolutamente nenhuma garantia de que ele melhorará a velocidade em outro. Na maioria dos casos, executar o que será uma otimização longa e árdua toda vez que eles desejam fazer um novo lançamento não valerá a pena para desenvolvedores, a menos que talvez por grandes esforços de computação (onde os programas provavelmente serão ajustados manualmente e não escritos em java de qualquer maneira).

Eu diria que um agendador de threads de auto-aprendizado é uma boa ideia, mas você não pode tratá-lo como um problema de otimização clássica aqui. Você precisa ter certeza de que seu pedido de agendamento permanecerá ideal (improvável) ou encontrar um método de otimização que funcione em tempo de execução. E a questão aqui pode ser que não demoraria muito para a sobrecarga do seu agendador destruir qualquer ganho de desempenho que você possa obter.

Eu acho que essa é uma pergunta um tanto subjetiva, mas no geral não, não pense que funcionaria.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top