3
respostas

Pool de Threds no glassfish/jboss

Na aula de programação paralela, o professor deixa claro as vantagens de usar um pool de threads.

No curso em questão, usamos uma aplicação desktop simples pra fazer os testes.

Agora fica o questionamento: Nos casos das aplicações que rondam um servidor como glassfish/jboss elas necessitam desse pool de Threads?

Nas configurações desses servidores há um pool que podemos informar a quantidade de threads, iddle timeout entre outros.

Se eu crio "na mão" uma threas em uma classe gerenciada pelo spring ou mesmo um EJB automaticamente eu já estou usando esses benefícios?

3 respostas

Oi Rachel, tudo bem?

Se você criar na mão threads gerenciadas pelo spring não necessariamente você está utilizando um thread pool. O pool de threads é uma ferramenta útil e bastante simples no conceito, mas há vários problemas a serem observados ao implementar e usar um, como deadlock e thrashing. Servidores de aplicação como o Wildfly e Glassfish já abstraem essa complexidade e disponibilizam via configuração o controle do pool de threads da sua aplicação. Sua aplicação estando dentro de um servidor de aplicação com esse recurso você já estará por default utilizando um thread pool.

Espero ter ajudado,

Abraço!

Acho que talvez não tenha ficado claro. Então vou mudar o exemplo.

Imagine que eu vou criar uma aplicação simples. O sistema apenas irá registrar o cpf e nome dos usuários que irão concorrer a um prêmio de 1 milhão de reais.

Naturalmente, essa aplicação deve receber MUITOS acessos. Então, acredito eu, que o pool de threads que está na configuração do glassfish/joss refere-se a quantidade de requisições que esse servidor vai receber. Ou seja, cada requisição de cadastro, ele uma thread diferente. E para que não haja problemas de performance, esses servidores de aplicação utilizam um pool de threads. Inclusive, eu posso aumentar ou dimiminuir esse poll a depender dos parâmetros do meu negócio.

O que eu gostaria de entender é: Se eu por algum motivo precisar rodar um serviço que tenha 500 mil registros a serem enviados para uma outra aplicação terceira. Neste caso eu posso criar um for com os registros a serem enviados e criar uma thread NA MÃO..

new Thread(meuServico).start()..

O glassfish e jboss vão, de alguma forma, utitilizar o pool de threads?

Me parece que não... É como se eu tivesse fazendo isso por fora dele. É como se eu tivesse num main fazendo isso.

Rachel,

Suponha que você esteja rodando sua aplicação em um Wildfly com 10 threads no pool...pelo seu exemplo, você vai estar dentro de uma thread gerenciada pelo servidor de aplicação, e terá 500 mil registros para processar, correto? Se você começar a criar threads manualmente, serão threads não gerenciadas pelo servidor de aplicação. A ideia do pool de threads do servidor de aplicação é ser "por baixo dos panos".

Nesse cenário que você disse, faz mais sentido o servidor de aplicação receber 500 mil requests do que sua aplicação querer criar threads manualmente para "processar em paralelo".