Next: Requisitos adicionais
Up: ep4
Previous: Requisitos da solução
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: Requisitos adicionais
Up: ep4
Previous: Requisitos da solução
Francisco Reverbel
2006-06-11