Skip to content

Iagohss/projeto-pc-2022.2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Projeto de Programação Concorrente 2022.2

Implementação do CineLsd como projeto para disciplina de concorrente na linguagem Go. Laboratorio Base

🛠️ Construído com

✒️ Autores

  • Amilton Cristian - Desenvolvedor especializado em programação sequencial. - AmiltonCabral

  • Iago Silva - Desenvolvedor especializado em programação concorrente. - Iagohss

  • Joab Cesar - Responsável por testes, processamento e desenvolvimento auxiliar. - Joabcmp

    Embora o desenvolvimento do projeto foi dividido igualmente estando todos presentes em reuniões sincronas de forma online.

🍷🗿 Estrategias adotadas

  • A concorrência é introduzida por meio do uso de Go Routines. Para cada id lido no arquivo actors.txt é criada uma Go Routine executando a função handleActor. Onde, uma requisição é feita ao banco de dados para obter os dados de um ator específico. Em seguida, é criada uma nova goroutine para cada filme associado a esse ator. Desse modo, os processamentos e requisições relacionados a cada ator podem ser feitos concorrentemente, aumentando o desempenho do sistema.

  • Para evitar problemas de concorrência durante o processamento do ranking, foram utilizados canais e sync.WaitGroup. Cada goroutine responsável por obter a avaliação média de um ator escreve seu resultado em um canal results. Essa abordagem permite que os atores sejam recebidos de forma segura e síncrona. A chamada wgAVGs.Wait() garante que a thread principal aguarde até que todos os atores tenham sido processados antes de fechar o canal results. Essa ação indica que nenhuma outra goroutine enviará dados para o canal. No contexto da função ranking, isso permite que a iteração sobre o canal seja finalizada corretamente quando todos os atores forem processados.

  • Para evitar problemas de concorrência durante o cálculo da média de avaliações dos atores, foi usada a mesma abordagem. Cada goroutine responsável por obter a avaliação de um filme escreve seu resultado em um canal ratings. O sync.WaitGroup é utilizado para aguardar a finalização de todas as goroutines que obtêm as avaliações antes de calcular a média no método getActorAVGRating.

⚙️ Demonstração de possiveis resultados

Concurrent.go image

sequencial.go image

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •