Capítulo 4. Patrones de concurrencia en Go
Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com
Hemos explorado los fundamentos de las primitivas de concurrencia de Go y discutido cómo utilizarlas adecuadamente. En este capítulo, profundizaremos en cómo componer estas primitivas en patrones que te ayudarán a mantener tu sistema escalable y mantenible.
Sin embargo, antes de empezar, tenemos que tocar el formato de algunos de los patrones contenidos en este capítulo. En muchos de los ejemplos, utilizaremos canales que pasan interfaces vacías (interface{}). El uso de interfaces vacías en Go es controvertido; sin embargo, lo he hecho por un par de razones. La primera es que facilita la redacción de ejemplos concisos en el resto del libro. La segunda es que en algunos casos creo que esto es más representativo de lo que el patrón intenta conseguir. Trataremos este punto más directamente en la sección "Tuberías".
Si esto te parece demasiado polémico, recuerda que siempre puedes crear generadores Go para este código, y generar los patrones para utilizar el tipo que te interese.
Dicho esto, ¡vamos a sumergirnos y a conocer algunos patrones de concurrencia en Go!
Encierro
Cuando se trabaja con código concurrente, hay algunas opciones diferentes para un funcionamiento seguro. Hemos repasado dos de ellas:
-
Primitivas de sincronización para compartir memoria (por ejemplo,
sync.Mutex) -
Sincronización mediante comunicación (por ...