ae galera, blz???
eu queria limitar a quantidade de CPU que minha classe (ou uma das threads) usa, como que eu faço isso??
ae galera, blz???
eu queria limitar a quantidade de CPU que minha classe (ou uma das threads) usa, como que eu faço isso??
Mude de sistema operacional e JVM.
A JVM da Sun no Windows não tem suporte ao recurso de limitar consumo de CPU por thread ou processo, por exemplo; acredito que só a JVM da IBM rodando sob z/OS.
po…e eu axando que tivesse alguma api que fizesse isso, algum metodo de thread, alguma coisa assim…
axava que fosse simples…dexa pra la…
vlw thingol
O que você pode fazer, é utilizar o Thread.yield(); e dar oportunidade para outros processos, ou threads, utilizarem a cpu.
Não chega nem perto de uma configuração específica, mas pode ajudar…
Limitar uma thread a usar somente uma quota de uma cpu não tem como com a maioria dos SOs modernos, tais como windows, linux, solaris, etc.
De fato, isso só tem utilidade quando você quer fair scheduling com garantias duras de quotas, isso normalmente envolve algum contrato de SLA em ambientes muito esquisitos.
Normalmente oque todo mundo quer é controlar prioridade e afinidade, isto é, você não quer que o indexador de desktop roube tempo de CPU do navegador, ele deve rodar apenas quando a CPU estiver ociosa, ou não existir processos mais importantes na fila. Para tal se designa prioridades diferentes para cada thread, de uma olhada na classe java.lang.Thread, que ela possui suporte a controlar isso.
Afinidade é definir em quais processadores lógicos* uma thread pode executar, isso é bem útil quando você precisa de garantias maiores que apenas prioridade ou então deseja realmente particionar a capacidade de processamento da máquina, por exemplo, colocar cada instancia de VMWare atrelada a um core.
Hoje CPU é um recurso abundante e o maior problema é conseguir controlar prioridades de I/O. Java não possui suporte nesse sentido - uma pena.
*Hoje já existem vários processadores com 3 níveis lógicos: CPU, core e SMT/thread.
Galera, não tem aquele setPriority() da Thread?
thread.setPriority(Thread.NORM_PRIORITY);
Não vai ser um controle total, mas talvez ajude…
pois é…
eu tava querendo que essa minha aplicação rodasse só no tempo que o cpu tiver ocioso, tipo, dar a preferencia pra qualquer aplicativo não java.
pergunta: quando o sistema operacional vai escalona os seus processos ele considera a JVM como um processo concorrendo com os processos do SO(no meu caso o windows…), e os processos java todos na jvm, ou cada aplicação java concorre em seprado com os processos do sistema??
se eu starta a minha thread e ja coloca prioridade 1, e no meu metodo run eu coloca dentro do loop infinito, sempre no final, um yeld, ele vai da preferencia pros outros serviços não java?
[quote=maior_abandonado]pois é…
eu tava querendo que essa minha aplicação rodasse só no tempo que o cpu tiver ocioso, tipo, dar a preferencia pra qualquer aplicativo não java.
pergunta: quando o sistema operacional vai escalona os seus processos ele considera a JVM como um processo concorrendo com os processos do SO(no meu caso o windows…), e os processos java todos na jvm, ou cada aplicação java concorre em seprado com os processos do sistema??
se eu starta a minha thread e ja coloca prioridade 1, e no meu metodo run eu coloca dentro do loop infinito, sempre no final, um yeld, ele vai da preferencia pros outros serviços não java?[/quote]
Dica: se você quiser que sua aplicação rode só em tempo ocioso, você pode iniciá-la com um comando do sistema operacional que reduz a sua prioridade. No caso do Unix/Linux, use “nice” (exemplo: nice java -cp . SuaAplicacao). No caso do Windows, use “start /low” ou “start /belownormal”. (exemplo: start /low java -cp . SuaAplicacao).
Se quiser que uma das threads rode em tempo ocioso, então use Thread.setPriority.
Thread.yield não é recomendado; use Thread.sleep mesmo, e com o maior tempo que puder usar sem travar sua aplicação.
vlw tingol…
se eu fizer isso pela classe runtime (metodo exec) funciona igual?
pq tipo, eu tinha dexado a classe da janela com o main, e colocado no .jar, nesse caso coloco uma classe main la só pra chama a classe janela usando o dos(runtime no caso)…
tipo, tenho a intenção de dexa o jar la pra fazer isso assim como antes, só de clica n hora de abrir o programa, no jar mesmo com todas as classe nele…nao keria abri por um arquivo em lotes…axo q isso fica uma bagunça…
a cada loop da thread cho q eu vo da um sleep memo…
brigadao galera pelas resposta…