Estou desenvolvendo uma aplicação para aprendizado que utilize multiprogramação pesada. Que eu saiba, as Threads do Java não criam seu próprio processo no SO o que caracterizaria multiprogramação leve, a minha dúvida é se seria possivel passar o controle da Thread para o SO, criando um processo independente para ela.
Se alguém puder indicar algum material de consulta ou até mesmo um exemplo será de grande utilizade
No linux, ele cria um processo diferente para cada… você pode até vê-los se fizer um PS.
Na verdade, o comportamento exato das threads é muito dependente do SO.
Mas é possível sim, criar um processo separado. Basta usar Runtime.exec. Entretanto o java não tem mecanismos de comunicação entre processos (filas de mensagens ou algo do tipo). Você acaba sendo obrigado a usar sockets entre as suas aplicações…
paulovittor23
Por enquanto acredito que não vou precisar dessa comunicação entre os processos pq eles vão ser totalmente independentes.
Como crio os processos ? System calls ?
ps: o ambiente é windows.
pcalcado
O Linux possui um esquema de threads ruim até o kernel 2.6, por isso que você tem esse comportamento.
Mas qual a diferneça funcional que voce tme entre os modelos que chama de ‘leve’ e ‘pesada’? Essa resposta eh necessaria para podermos de ajudar falando a mesma lingua.
paulovittor23
pcalcado:
Mas qual a diferneça funcional que voce tme entre os modelos que chama de ‘leve’ e ‘pesada’? Essa resposta eh necessaria para podermos de ajudar falando a mesma lingua.
Então, funcionalmente não há diferença.
Mas em desempenho acredito que sim.
Como no windows uma Thread não é um processo significa que todas as threads vão rodar no mesmo processo, e se esse processo tiver prioridade baixa o desempenho será baixo.
Acho que ficou meio confuso isso. :roll:
Vou dar uma pesquisada melhor…
pcalcado
Isso não costuma fazer diferença porque se um processo de um usuario tem prioridade baixa provavelmente todos terao.
Bom, pesquise bastante porque é uma decisão crucial. Provavelmente não há nada que você tenha que fazer que não seja possível com Threads e se tiver provavelmente Java não é a melhor solução porque tem IPC fraquíssimo.
ViniGodoy
E é difícil que você possa criar um processo a partir de outro com prioridade superior ao processo gerador.
Normalmente a melhor solução é usar threads mesmo.
Para criar novos processos o caminho é usar o comando Runtime.exec (como eu já tinha falado) ou a classe ProcessBuilder.
Mas eu também não partiria para esse caminho.
Se tiver problemas de performance, é melhor usar um profiler em sua aplicação e eliminar a gordura de seu código. Otimizações como essa dificilmente serão necessárias.
paulovittor23
entendi, na verdade eu não estou tendo esse problema, mas como surgiu a dúvida é sempre melhor perguntar