Postagem em destaque

A incrível velocidade do Go

Imagem
Um dos motivos que gosto do Go (a linguagem de programação, não o jogo), é que ele é extremamente rápido. E não estou falando de utilizar goroutines pois aí é covardia. Estamos migrando um sistema de Coldfusion para Go e PHP e uma das rotinas insere um registro no banco de dados no início e outra no fim do processo. Pense como se fosse um log, mas um log específico para essa rotina. Dessa forma: 2023-05-18 17:45:03. 687     ... [processaImagem] Incorporando imagem 2023-05-18 17:45:03. 688     ... [processaImagem] Imagem incorporada Entre o inicio e o final do processamento levou 1ms. Até aí, tudo bem, se não fosse o fato dessa tabela ter o campo timestamp como parte da chave primária. Se reparar, o tempo é definido em milissegundos. Com o Coldfusion esse processo dura cerca de 20ms. Simplesmente migrando para Go, o tempo caiu muito, para menos de 1ms e assim, começou a dar erro de chave duplicada. A solução? Depende, sempre depende. No nosso contexto, a mais simples foi feita, pois nã

Concorrência com GO

Comecei a programar com GO há pouco tempo. E logo me deparei com algumas dúvidas de como usar a concorrência. Pesquisei bastante e encontrei algumas soluções muito interessantes, as quais compartilho aqui.

Sugiro você primeiro assistir esse video do Rob Pike no Google I/O 2012: https://youtu.be/f6kdp27TYZs. Os programas que ele mostra podem ser encontrados aqui: https://github.com/kevchn/go-concurrency-patterns. E a apresentação que ele utilizou está aqui: https://talks.golang.org/2012/concurrency.slide

Outros links que li e achei úteis sobre concorrência em GO:

Por fim, criei um exemplo (https://github.com/alexsetta/seqVsConc), no qual comparo o desempenho de duas funções que fazem a mesma coisa: acessar um slice de URLs e retornar o StatusCode de cada uma. A diferença é que uma função faz a busca sequencial e a outra de forma concorrente.

Na prática, o tempo sequencial é a soma de todos os tempos individuais pois a função acessa uma URL, espera a resposta e segue adiante e o tempo concorrencial é, para um número limitado de URLs, o tempo de acesso da URL mais lenta, pois neste caso a função dispara várias chamadas simultâneas e quando a mais lenta terminar as outras já terão terminado.

O tempo de resposta fala por si só:



Comentários

Postagens mais visitadas deste blog

Netflix não mostra ícone de streaming

Google Hacking

FTP não funciona no PHP