Um estudo sobre bugs de concorrência em aplicações Go open-source

  • Alonso L. Fritz UNIOESTE
  • Guilherme Galante UNIOESTE
  • Marcio Oyamada UNIOESTE

Resumo


Com a predominância de hardware multi-core, a demanda por softwares concorrentes tem aumentado. Porém escrever programas concorrentes corretos é uma tarefa pouco trivial, e lidar com esse desafio requer ainda hoje avanços em várias direções, incluindo a análise de programas concorrentes, a detecção de bugs de concorrência, padrões de correções de bugs, natureza da manifestação de bugs e outros. Este trabalho apresenta um estudo sobre as características de bugs de concorrência em aplicações escritas na linguagem Go. Foram analisados os padrões de bugs de concorrência, as causas raízes, as características referentes a manifestação, como a quantidade de goroutines e primitivas envolvidas, além das estratégias de correção de 90 bugs de concorrência selecionadas aleatoriamente de três aplicações: Docker, Terraform e CockroachDB. Os resultados indicam que 72% dos bugs registrados utilizam comunicação por memória compartilhada; e somente 15% dos bugs não-bloqueantes foram relacionados a passagem de mensagem. Esse estudo visa fornecer uma melhor compreensão dos modelos de concorrência da linguagem Go auxiliando no desenvolvimento mais confiável e seguro, e de ferramentas de diagnóstico para Go e linguagens para programação concorrente.

Referências

Cockroach (2023). CockroachDB - distributed SQL for your applications. [link].

Cox-Buday, K. (2017). Concurrency in Go: Tools and Techniques for Developers. ”O’Reilly Media, Inc.”.

Docker (2023). Docker - build, ship, and run any app, anywhere. [link].

GO (2023). Effective Go. [link].

Hennessy, J. L. and Patterson, D. A. (2011). Computer architecture: a quantitative approach. Elsevier.

Hoare, C. A. R. (1978). Communicating sequential processes. Commun. ACM, 21(8):666–677.

Lu, S., Park, S., Seo, E., and Zhou, Y. (2008). Learning from mistakes: a comprehensive study on real world concurrency bug characteristics. In Proceedings of the 13th international conference on Architectural support for programming languages and operating systems, pages 329–339.

Pike, R. e. a. (2023). Frequently asked questions (FAQ): Why goroutines instead of threads? [link].

Stoica, I., Stanculescu, M., Marinescu, D. C., and Popescu, T. (2014). The evolution of multicore processors: A survey of hardware trends and software challenges. ACM Computing Surveys (CSUR), 47:1–38.

Terraform (2023). Terraform - infrastructure as code. [link].

Tu, T., Liu, X., Song, L., and Zhang, Y. (2019). Understanding real-world concurrency bugs in go. In Proceedings of the Twenty-Fourth International Conference on Architectural Support for Programming Languages and Operating Systems, pages 865–878.

Yin, Z., Yuan, D., Zhou, Y., Pasupathy, S., and Bairavasundaram, L. (2011). How do fixes become bugs? In Proceedings of the 19th ACM SIGSOFT symposium and the 13th European conference on Foundations of software engineering, pages 26–36.
Publicado
23/10/2024
FRITZ, Alonso L.; GALANTE, Guilherme; OYAMADA, Marcio. Um estudo sobre bugs de concorrência em aplicações Go open-source. In: SIMPÓSIO EM SISTEMAS COMPUTACIONAIS DE ALTO DESEMPENHO (SSCAD), 25. , 2024, São Carlos/SP. Anais [...]. Porto Alegre: Sociedade Brasileira de Computação, 2024 . p. 336-347. DOI: https://doi.org/10.5753/sscad.2024.244783.