next up previous
Next: Requisitos adicionais Up: ep4 Previous: Requisitos da solução

Modelos de programação de servidores multithreaded

O exemplo ServidorPrimos.java é um servidor multithreaded que cria uma thread para tratar cada sessão com um cliente. Criar uma thread para cada sessão é um dos possíveis modelos de programação de servidores multithreaded. Os três modelos mais freqüentemente usados são:

Thread-per-request:
Este modelo de programação cria uma nova thread para cada requisição de serviço proveniente de algum cliente. A thread efetua o serviço requisitado, manda uma mensagem de resposta para o cliente e encerra sua execução. O modelo thread-per-request é útil para servidores que tratam requisições de longa duração (como consultas a um banco de dados) emitidas por múltiplos clientes. Ele é menos útil no caso de requisições de curta duração, devido ao overhead de criação de uma thread a cada requisição. Pode também consumir muitos recursos do S.O. caso muitos clientes façam requisições simultâneas.

Thread-per-session:
Esta variação do modelo thread-per-request amortiza por várias requisições o custo de criação de uma thread. Para cada cliente que se conecta com o servidor é criada uma nova thread, que tem a duração da sessão do cliente. O modelo thread-per-session é útil no caso de múltiplos clientes que travam conversações demoradas com o servidor. Não é útil se os clientes fazem só uma requisição, pois recai no modelo thread-per-request.

Thread pool:
Esta variação dos modelos anteriores elimina o custo de criação de threads empregando um pool de worker threads criadas na inicialização do servidor. É útil para servidores que querem colocar um limite na quantidade de recursos do S.O. que eles consomem. A alocação de threads do pool pode ser feita por requisição ou por sessão. No primeiro caso, o tamanho do pool determina o número de requisições que podem ser processadas concorrentemente. As requisições concorrentes que ultrapassarem este número devem ser enfileiradas para posterior tratamento. No segundo caso, o tamanho do pool determina o número de sessões simultâneas com clientes. Os clientes que ultrapassarem este número devem ser enfileirados para posterior atendimento.


next up previous
Next: Requisitos adicionais Up: ep4 Previous: Requisitos da solução
Francisco Reverbel
2006-06-11