Git Product home page Git Product logo

projetoconcorrente's Introduction

Projeto de Programação Concorrente

Alunos: Carlos Alberto Pamplona Filho / Gabriel Rodrigues Oliveira Lacerda

Metodologia

O objetivo deste trabalho, referente à disciplina de programação concorrente do período de 2023-1, consiste em entender a execução de programas de maneira concorrente na linguagem RUST, e, a partir disso, avaliar a diferença de performance entre algoritmo de bakery e o uso de semáforos como estratégias de implementação das travas, em problemas sem zona crítica (apenas representativa). Para avaliar o desempenho, mediremos os tempos de execução do código a partir de diferentes números de threads, monitorando sua performance.

Análise dos resultados

Para macOS M2

  • Processador CPU de 8 núcleos (4 de desempenho e 4 de eficiência)
  • 8 gb memória RAM
  • 512 gb dísco (ssd)

Bakery

Número de Threads Tempo de execução
2 0m0.302s
4 0m0.395s
6 0m0.092s
16 0m0.120s
32 0m0.132s
64 0m0.117s
128 0m0.182s
256 0m0.320s
512 0m1.392s
1024 0m3.955s

Semáforo

Número de Threads Tempo de execução
2 0m0.095s
4 0m0.095s
6 0m0.106s
16 0m0.112s
32 0m0.198s
64 0m0.166s
128 0m0.464s
256 0m0.375s
512 0m1.425s
1024 0m3.965s
Gráfico de comparação entre resultados
grafico

Para Intel© Core™ i5-10300H CPU @ 2.50GHz

  • Processador com quatro núcleos físicos e 8 núcleos lógicos.
  • 16 GB de memória RAM
  • 768.2 GB de disco (ssd)

Bakery

Número de Threads Tempo de execução
2 0m0,001s
4 0m0,001s
8 0m0,002s
16 0m0,003s
32 0m0,007s
64 0m0,019s
128 0m0,054s
256 0m0,104s
512 0m0,346s
1024 0m1,302s

Semáforo

Número de Threads Tempo de execução
2 0m0,001s
4 0m0,001s
8 0m0,002s
16 0m0,003s
32 0m0,007s
64 0m0,020s
128 0m0,056s
256 0m0,100s
512 0m0,352s
1024 0m1,316s
Gráfico de comparação entre resultados
grafico

Extra

Durante a pesquisa deste projeto, foi efetuada também uma união de resultados com outro grupo para avaliar a diferença de performance entre diferentes linguagens de programação, a partir de implementações da espera ocupada utilizando o algoritmo de bakery. Nesse caso, reutilizamos nossa implementação em Rust, e a avaliamos contra outra implementação desenvolvida em GO.

Comparação da implementação do Bakery em GO vs Rust

A implementação do código em Go foi disponibilizada pela dupla Guilherme Aureliano e Adriano Lira. Ambas as implementações em Go e Rust seguem o mesmo algoritmo de Bakery para controle de concorrência. As estruturas de dados e os mecanismos de sincronização são diferentes nas duas linguagens, refletindo as peculiaridades e as práticas recomendadas por cada uma.

Gráfico de comparação entre resultados
grafico

A partir do observado, é possível notar que o código em GO é menos performático do que o código em RUST à primeira vista. Entretanto o mesmo se mostra mais escalável, tendo uma performance melhor para um número maior de threads.

Conclusão

Durante os experimentos realizados acima descritos, com o código provido, obtivemos um resultado que favorece o algorítmo de bakery sob situações em que temos um número maior de threads (no nosso caso, para uma quantificação de até 1024 valores). Entretanto, ainda assim, obtivemos resultados muito semelhantes, que ficam dentro de uma margem de erro de 5%. Considerando essa mesma margem e o número de threads apresentado, o resultado pode ser considerado equivalente ou muito semelhante.

É importante ressaltar que o projeto é apenas uma breve demonstração da capacidade da linguagem RUST ao lidar com problemas na área da programação concorrente, e incentivamos um aprofundamento de pesquisas nessa área,

Material Referência

BOS, M. In: Rust Atomics and Locks: Low-Level Concurrency in Practice. Primeira Edição. Sebastopol. O’Reilly Media, Inc., 2023.

projetoconcorrente's People

Contributors

gabriellacerda00 avatar pamplonacarlos avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Forkers

pamplonacarlos

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.