Você está na página 1de 2

Produtor Consumidor Webserver

Threads em Java

Lucas Szeremeta
Colegiado de Cincia da Computao
Universidade Estadual do Oeste do Paran
Cascavel, PR, Brasil
Lucas_201092@hotmail.com
Leonardo R. Nardelli
Colegiado de Cincia da Computao
Universidade Estadual do Oeste do Paran
Cascavel, PR, Brasil
leonardelli@live.com

Igor S. Lopes
Colegiado de Cincia da Computao
Universidade Estadual do Oeste do Paran
Cascavel, PR, Brasil
igorstklps@gmail.com


ResumoEste artigo especifica a implementao de um
webserver a partir de um produtor consumidor com uso de
threads.
Palavras-chaveThreads; J ava; produtor/consumidor;
webserver;
INTRODUO
Este artigo especifica a implementao de um webserver
atravs da utilizao de produtor consumidor e threads. Ao
longo do artigo ser discutido como foi feita a implementao,
tambm ser abordada a implementao de um segundo projeto
que gera mltiplas requisies a webserver para fins de testes
de desempenho.
IMPLEMENTAO
A implementao foi feita utilizando a linguagem JAVA.
Foram feitas as seguintes classes :

Main :
A partir desta classe ser inicializada a execuo do
programa. Inicialmente criado um Socket para uma
porta aleatria e essa porta aleatria mandada por
parmetro para a classe que ser compartilhada entre
as funes do produtor consumidor. Aps isso
criado o objeto do produtor e os objetos do
consumidor de acordo com nmero de threads que
inserido pelo usurio.

Produtor :
O produtor recebe como parmetro da classe
principal(Main) o objeto da classe compartilhada e
executa uma funo que chama o mtodo de
produo dentro deste objeto. Dentro dessa classe
compartilhada h o comando que fica em espera at o
recebimento de alguma requisio na porta que foi
informada para Socket. Aps o recebimento da
requisio chamada uma funo para adicionar essa
requisio h uma lista.

Consumidor:
O consumidor assim como o produtor recebe da
classe principal um objeto da classe compartilhada e
executa um mtodo desse objeto. Dentro da classe
compartilhada ele confere se a lista que est sendo
compartilhada contm pelo menos uma requisio.
H um semforo que faz a intercalao entre as
threads que esto fazendo a execuo do consumidor
para que no haja o problema de acesso simultneo
uma mesma requisio entre elas. criado duas
variveis uma responsvel pelas requisies vindas
do cliente, e outra para o envio do que pedido nessa
requisio. Aps o envio do arquivo que foi
requisitado chamado uma funo que deleta da lista
compartilhada estas requisio, ou seja, que ela j foi
realizada.

Sincronizao:
Os mtodos de adio e remoo de itens da lista so
sincronizados para que no haja conflito, por
exemplo:
Aps a remoo do primeiro item ocorre uma
realocao para que o segundo item venha ser o
primeiro e o terceiro torne-se o segundo, e assim por
diante. Pode ocorrer que neste mesmo instante pode
ocorrer a adio de uma nova requisio ocasionando
em inconsistncia na lista.

Encerrar:
O webserver fica em execuo infinitamente at que
chegue uma requisio tendo como contedo 0. Aps
isso o programa finalizado.


TABELA DE TESTES
n Requisies Threads Sequencial
1000 1 seg. 3 seg.
10.000 5 seg. 38 seg.
100.000 37~39 seg. 7min. e 40seg.
500.000 3min. 8seg. ---

Obs: Os tempos so valores aproximadose, e no foi
realizado o teste com mais de uma thread para a
produo e uma para o consumo da requisio, pois
como quase toda a execuo dos mtodos tem que ser
feita de forma que somente um seja executado por
vez para que no seja processada a mesma requisio
por duas threads por exemplo. Dessa forma tendo
mais de uma thread para essa funo apenas uma
executar enquanto a outra ficara em espera, ou seja,
no ter instrues que sero executadas em paralelo
por ambas as threads, assim no tendo ganho nenhum
na adio de mais threads.

CONCLUSO
Ao fim do trabalho foi claramente visvel, um ganho
relevante de desempenho pelo uso da execuo em
paralelo das threads em relao forma sequencial.
Esse ganho em tempo de execuo deve-se ao fato de
que so aceitas novas requisies so recebidas ao
mesmo tempo que so processadas, ao contrrio da
sequencial que ao receber uma requisio deve
processa-la antes de receber a prxima requisio.