Evento 13 Maggio

13
Maggio

Primitive di concorrenza di Golang: come usarle (e come non farlo)

Ora inizio: 18:00 CEST


Durata: 45min


Format: webinar

Dove: online


Lingua: Inglese


Prezzo: gratuito

Speaker

Piyush Verma

Co-founder e CTO di Last9.io

Abstract

Qualsiasi codice in Go che scrivo richiede del refactoring per risolvere race condition e deadlock. Le primitive di concorrenza come atomic, sync, channel e wait group hanno i loro pregi e difetti. La mancanza di esperienza causa spesso molte iterazioni di riscrittura del codice. Questo talk ha l’obiettivo di risolvere questo problema.

Ho visto molti software in Go sviluppati come programmi di contorno, invece che veri e propri web server, spesso utilizzati per fare trasferimenti massicci di dati in modo efficiente ed affidabile. Con questi presupposti, dobbiamo gestire sia la concorrenza che il parallelismo. Ogni volta che ci sono più worker che prendono in carico un task, ci sarà contesa e starvation. La mancanza di linee guida per un design appropriato, induce gli sviluppatori a scrivere codice non performante e con race condition, portando inevitabilmente ad un refactoring.

Per fornire un esempio, questi sono i concetti che avrei voluto sapere:

  • Quali differenze ci sono nell’usare un channel, wait group, atomic o mutex.
  • Non si dovrebbe usare wg.Add() dentro una goroutine.
  • Come si risolve il problema di consumatori multipli in attesa su un evento?
  • Come usare un atomic int per sincronizzare worker multipli, tramite la segnalazione di un task completato.

Il talk non si limita agli scenari di cui sopra, ma intende coprire alcuni di questi costrutti per ridurre il refactoring che gli sviluppatori Golang devono fare, nonché agevolare una migliore comprensione dei design pattern di sistemi distribuiti.


Argomenti

  • Quali differenze ci sono nell’usare un channel, wait group, atomic o mutex.
  • Come usare le primitive di concorrenza.
  • Come sincronizzare worker.
  • Come prevenire race condition.
  • Come progettare sistemi distribuiti.

A chi è rivolto

Livello intermedio


Prerequisiti

Conoscenza di base del linguaggio Go, wait group, channel, mutex e concetti su primitive di concorrenza.


Materiale necessario

Nessuno.


Attestato di partecipazione

Un attestato di partecipazione verrà rilasciato alla fine del webinar.

Guarda su Youtube

Follow us