Padrões de Concorrência da Linguagem Go

By Rafael Freitas Schmid

Elevator Pitch

Go é uma linguagem projetada para desenvolver soluções concorrentes de forma eficiente. Nessa talk vamos responder: Qual a diferença entre Paralelismo e Concorrência? Qual a diferença entre threads e Go routines? Como Go explora esses recursos e exemplos dos padrões de concorrência da linguagem.

Description

Se você começou a desenvolver na linguagem de programação Go e ainda não conhece a fundo os recursos de concorrência que ela proporciona ou como funcionam, ou se já desenvolve a algum tempo e não conhece em detalhes os recursos de concorrência da linguagem, essa talk é para você.

Introdução

Go é uma linguagem intrinsecamente concorrente, o que possibilita o desenvolvimento de soluções que exploram de forma eficiente os recursos do processador sem ter que utilizar bibliotecas externas à linguagem. Por meio de Go routines e threads, permite um nível de concorrência nativo muito superior que as linguagens tradicionais.

Go routines são funções que executam de forma concorrente e podem existir centenas ao mesmo tempo em um programa em execução. Isso é possível por que, diferente das threads que são geridas pelo Sistema Operacional, as Go Routines são geridas pelo runtime da linguagem GO, que faz o escalonamento dessas rotinas de acordo com a disponibilidade de threads no sistema. Esse alto nível de concorrência torna Go uma linguagem muito recomendada em soluções com alto throughput.

A necessidade de comunicação entre os recursos concorrentes é uma necessidade natural de qualquer solução concorrente, Go não utiliza a abordagem tradicional de compartilhar memória para se comunicar, mas se comunica compartilhando memória. Existem alguns padrões de concorrência como generator, multiplexing, selecting, que permitem modelar diversas soluções de forma simples e eficiente.

Nesta Talk vamos explorar os seguintes temas:

  • A diferença entre paralelismo e concorrência.
  • O que são Go routines?
  • A diferença entre threads e Go Routines.
  • Padrões de paralelismo em Go utilizando go routines, channels e wait groups

Você terá um overview da linguagem Go, com foco nos recursos concorrentes da linguagem apresentados com exemplos práticos. Ao final da apresentação você estará apto a responder como Go explora o paralelismo, bem como, porque as Go routines e o meio de compartilhamento de memória escolhido pelos seus criadores são tão importantes nesse processo.

Notes

Durante o período de desenvolvimento de minha tese de doutorado, estudei, implementei e projetei algoritmos paralelos na linguagem C++. Quando comecei a trabalhar no Mercado Livre, tive meu primeiro contato com a linguagem de programação Go e fiquei maravilhado com a simplicidade que a linguagem permitia explorar esses recursos, e quis logo entender o que fazia dela tão atrativa. Em menos de 6 meses fiz a primeira apresentação para a equipe sobre os padrões de paralelismo de GO, e agora, passados mais de 1 ano daquela apresentação, já tendo feito outra sobre o Garbagge Collector do Go, estou pronto para apresentar detalhes sobre esse assunto em uma talk.

Como pretendo abordar aspectos de paralelismo e concorrência, threads e escalonamento de tarefas, é importante que o expectador tenha conhecimentos de algoritmos e alguma experiência com programação para que possa absorver todo o conteúdo da apresentação.