Golang! Canais assincronos e Go Routines! - Teoria
Se você ja programa na linguagem Golang há um tempo ja deve ter percebido que a mesma possui uma forma de programação assincrona bastante diferenciada das demais que estamos acostumados no mercado, por exemplo JAVA e JAVASCRIPT/NODEJS.
Este post esta focado em te mostrar a como usar channels, pros e contras do mesmo. então vamos primeiro a teoria!
Para resumir channels e Go routines devemos saber que, Golang, diferente de Javascript, não possui um event-loop em seu runtime, o que na verdade ocorre são canais (channels) de comunicação direta entre threads virtuais. Sim, threads virtuais, ou melhor, Go Routines... mas calma, vou explicar melhor, Contextualizando, sistemas operacionais possuem processos, que pode ser considerado um ambiente onde um programa pode ser executado, dentro de um processo há informações sobre memoria, status da aplicação, program counter, PID, etc. Mas estamos apenas nas threads. Threads são a menor unidade dentro do conjunto de um processo, com ela também é permitodo múltiplas execuções em concorrentemente e paralelamente gerenciada apenas por um processo. Dito isso vamos finalmente para a explicação da tal Go Routine.
Go routines, podemos dizer, que é uma otimização de uma execução de uma tarefa de uma thread, otimização porque uma Go routine ao invés de particionar todo o runtime para executar uma instrução de código, particiona a execução de uma função/instrução como um todo, além disso o compilador do Go gerencia a alocação de memoria dentro de uma thread e utiliza apenas um tamanho de memoria necessário suficiente para executar uma Go routine, por exemplo, se sua aplicação necessita de 50kb de memoria para ser executada e possui 5 go routines, o compilador do Go é inteligente o suficiente para distribuir um tamanho minimo e necessário (podendo variar entre 10kb e 5kb pois o mesmo pode coletar a memoria restante que sobrou em uma Go routine e reciclar em outra) de memória para as 5.
Como este post ficou um tanto quanto grande, decidi fazer duas postagens para ficar uma leitura amigável e fluída. Te vejo na parte dois!