[ Threads ] Multiprogramação pesada

Boa Noite !

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 :smiley:

[]s

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…

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.

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.

[quote=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.[/quote]

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… :smiley:

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.

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.

entendi, na verdade eu não estou tendo esse problema, mas como surgiu a dúvida é sempre melhor perguntar :smiley:

ViniGodoy e pcalcado, agradeço pela ajuda. Tks

[]s