Vous êtes sur la page 1sur 7

Universidade Federal de Ouro Preto

ICEB Instituto de Cincias Exatas e Biolgicas


DECOM Departamento de Computao








Trabalho I Produtor Consumidor









Aluno: Thiago Antnio da Boa Viagem Lima
Professor: Joubert Lima
Disciplina: Sistemas Distribudos



Ouro Preto, 31 de Outubro de 2013
Introduo
O presente trabalho tem como objetivo usar a tcnica de programao do produtor
consumidor para calcular strings com um formato pr-definido. O trabalho tambm testado
quanto ao numero de threads assim como o consumo de memoria. Os grficos apresentam os
resultados.


Desenvolvimento

1. O problema

O problema a ser tratado o calculo de uma string. A String segue o formato abaixo:

Num; Num; Num; Op

Num pode assumir qualquer algarismo entre 1 e 9, e Op uma operao que pode ser
de somar, subtrair ou multiplicar. Desta forma os nmeros sero clculos entre se de
acordo com o operador Op. Os arquivo de teste foram gerados com string de forma
aleatria e automtica, por isso o cdigo dentro do consumidor para tratar as Strings e
calcula-las no to complexo, pois tem-se a certeza de que no existe Strings que
saiam do formato padro.

2. Soluo

Como soluo foi utilizado o produtor consumidor, o mesmo funciona de forma
paralela. A implementao deste, neste trabalho segue 3 linhas: o produtor, o recurso
e o consumidor. O recurso disputado pelo produtor que deseja armazenar algo
produzido em recurso e pelo consumidor que deseja consumir algo produzido
armazenado em recurso. Deste modo, a programao paralela atravs do uso de
threads se faz necessria. Pois dependendo do processamento a ser feito o tempo
requerido pode ser muito alto, ento se distribuirmos o processamento entre os vrios
ncleos da maquina o tempo de processamento pode diminuir drasticamente.

3. Materiais envolvidos

Foi utilizada a linguagem Java, por possuir muitos algoritmos prontos e fceis de serem
usados se comparados com a linguagem C++. A seguir uma abordagem top down da
soluo.

Main

Um objeto da classe resource criado, pois ele ser o recurso disputado entre
consumidor e produtor. Em seguida N objeto da classe producer e M objetos da
classe consumer so criados e inicializados. Os objetos da classe producer so
inicializados com o recurso e com um arquivo. Em sequencia as threads
produtoras e consumidoras so inicializadas uma a uma, para dar inicio ao
processo.

Producer
Esta classe implementa o mtodo run da interface Runnable. Dentro deste mtodo
o produtor busca a prxima linha do arquivo com o qual foi inicializado e coloca-a
disponvel dentro de recurso como uma String.
Consumer
Consumer tambm implementa o mtodo run da interface Runnable. Deste modo
o recurso analisado quanto sua disponibilidade, assim, se houver recursos a
serem consumidos eles so retirados da lista de recursos e tratados. Outro mtodo
disponvel na classe consumer o trataCalcs, este mtodo trata a String,
separando os nmeros dos ponto e virgulas e calculando os nmeros de acordo
com seus operandos.
Resource
Esta classe tem um atributo do tipo LinkedList, como este atributo
compartilhado pelas threads do consumidor e produtor, as regies onde este
atributo tratado so denominadas de criticas. Por este motivo s threads devem
ter sincronismo para trabalhar com o mesmo, de forma que quando uma thread
esteja alterando ou acessando este atributo, nenhuma outra thread pode ter
acesso ao mesmo. Por outro lado se for constatado que no mais recursos a
serem consumidos, as threads consumidoras so bloqueadas quanto ao acesso do
recurso.


Figura 3.1 Funcionamento do produtor consumidor.
4. Experimentos
Os experimentos foram feitos de modo a testar o runtime e o consumo de memoria, a
maquina de teste possui 4GB de memoria e processador i5 com 4 ncleos.
Tabela 4.1 Resultados experimentais do tempo de execuo e consumo de memoria

Testes RunTime(NanoSeg.) Consumo Memoria
1 Thread
produtora
Numero de Thread
1 375717008 52M
2 404897542 53M
4 417251838 45M
8 407167427 53M
16 438852555 45M
2 Threads
produtoras
1 550198721 53M
2 601330249 49M
4 612651116 52M
8 683550319 50M
16 617412207 50M
4 Threads
produtoras
1 809534943 52M
2 917715676 54M
4 820925865 54M
8 947563299 54M
16 880268156 54M


Grfico 4.1 Uma Thread produtora

Grfico 4.2 - Duas Threads produtoras

Grfico 4.3 Quatro Threads produtoras
0
100000000
200000000
300000000
400000000
500000000
1 2 3 4 5
RunTime(NanoSeg.)
0
100000000
200000000
300000000
400000000
500000000
600000000
700000000
1 2 3 4 5
RunTime(NanoSeg.)
0
200000000
400000000
600000000
800000000
1E+09
1 2 3 4 5
RunTime(NanoSeg.)

Grfico 4.4 Viso geral do aumento das Threads

0
100000000
200000000
300000000
400000000
500000000
600000000
700000000
800000000
900000000
1E+09
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
RunTime(NanoSeg.)
Concluso
O grfico mostra um crescimento prximo ao linear, porm um crescimento aparentemente
baixo. Isso mostra que apesar de o numero de threads do produtor ter dobrado ao longo do
tempo, o runtime no dobrou junto com as mesmas. Porm os resultados so muito instveis,
ao ponto que mesmo a maquina de teste ter apenas 4 ncleos, colocando 8 ou 16 threads o
runtime no aumentou, pelo contrario, em alguns casos o mesmo diminuiu.

Vous aimerez peut-être aussi