Prefacio
Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com
Hola, ¡bienvenido a La concurrencia en Go! Estoy encantado de que hayas elegido este libro y de acompañarte a explorar el tema de la concurrencia en Go a lo largo de los próximos seis capítulos.
Go es un lenguaje maravilloso. Cuando se anunció por primera vez y se lanzó al mundo, recuerdo que lo exploré con gran interés: era conciso, se compilaba increíblemente rápido, funcionaba bien, admitía la tipificación de patos y, para mi deleite, trabajar con sus primitivas de concurrencia era intuitivo. La primera vez que utilicé la palabra clave go
para crear una gorutina (algo de lo que hablaremos, ¡lo prometo!) se me dibujó una sonrisa tonta en la cara. Había trabajado con concurrencia en varios lenguajes, pero nunca había trabajado en un lenguaje que hiciera la concurrencia tan fácil (lo cual no quiere decir que no existan, sólo que no había usado ninguno). Había encontrado mi camino hacia Go.
A lo largo de los años pasé de escribir scripts personales en Go, a proyectos personales, hasta que me encontré trabajando en un proyecto de muchos cientos de miles de líneas profesionalmente. Por el camino, la comunidad fue creciendo con el lenguaje, y fuimos descubriendo colectivamente buenas prácticas para trabajar con concurrencia en Go. Algunas personas dieron charlas sobre los patrones que habían descubierto. Pero aún no existían en la comunidad muchas guías completas sobre cómo manejar la concurrencia en Go.
Con esto en mente me propuse escribir este libro. Quería que la comunidad tuviera acceso a información completa y de alta calidad sobre la concurrencia en Go: cómo utilizarla, buenas prácticas y patrones para incorporarla a tus sistemas, y cómo funciona todo bajo cuerda. He hecho todo lo posible por encontrar un equilibrio entre estas preocupaciones.
Espero que este libro te resulte útil.
Quién debería leer este libro
Este libro está pensado para desarrolladores que tengan cierta experiencia con Go; no intento explicar la sintaxis básica del lenguaje. El conocimiento de cómo se presenta la concurrencia en otros lenguajes es útil, pero no necesario.
Al final de este libro habremos discutido toda la pila de problemas de concurrencia de Go: errores comunes de concurrencia, motivación detrás del diseño de la concurrencia de Go, la sintaxis básica de las primitivas de concurrencia de Go, patrones comunes de concurrencia, patrones de patrones y diversas herramientas que te ayudarán en el camino.
Debido a la amplitud de los temas que trataremos, este libro será útil para diversos grupos de personas. La siguiente sección te ayudará a navegar por este libro en función de las necesidades que tengas.
Navegar por este libro
Cuando leo libros técnicos, suelo ir saltando por las áreas que despiertan mi interés. O, si estoy tratando de ponerme al día en una nueva tecnología para el trabajo, hojeo frenéticamente las partes que son inmediatamente relevantes para mi trabajo. Sea cual sea tu caso de uso, aquí tienes una hoja de ruta para el libro con la esperanza de que te ayude a guiarte hasta donde necesitas estar.
- Capítulo 1, Introducción a la concurrencia
-
Este capítulo te dará una amplia perspectiva histórica de por qué la concurrencia es un concepto importante, y también tratará algunos de los problemas fundamentales que hacen que la concurrencia sea difícil de conseguir correctamente. También aborda brevemente cómo Go ayuda a aliviar parte de esta carga.
Si tienes un conocimiento práctico de la concurrencia o simplemente quieres llegar a los aspectos técnicos de cómo utilizar las primitivas de concurrencia de Go, es seguro que te saltes este capítulo.
- Capítulo 2, Modelar tu código: Comunicar procesos secuenciales
-
Este capítulo trata de algunos de los factores de motivación que contribuyeron al diseño de Go. Esto te ayudará a contextualizar tus conversaciones con otros miembros de la comunidad Go y a entender por qué las cosas funcionan como lo hacen en el lenguaje.
- Capítulo 3, Bloques de construcción de la concurrencia de Go
-
Aquí empezaremos a profundizar en la sintaxis de las primitivas de concurrencia de Go. También trataremos el paquete
sync
, responsable de la sincronización del acceso a la memoria de Go. Si no has utilizado antes la concurrencia en Go y quieres entrar de lleno en ella, éste es el lugar adecuado para empezar.Entremezclados con los conceptos básicos para escribir código concurrente en Go, hay comparaciones de conceptos con otros lenguajes y modelos de concurrencia. Estrictamente hablando, no es necesario entender estas cosas, pero estos conceptos te ayudarán a conseguir una comprensión completa sobre la concurrencia en Go.
- Capítulo 4, Patrones de concurrencia en Go
-
En este capítulo, empezaremos a ver cómo se componen las primitivas de concurrencia de Go para formar patrones útiles. Estos patrones nos ayudarán tanto a resolver problemas como a evitar problemas que pueden surgir al combinar primitivas de concurrencia.
Si ya has escrito algo de código concurrente en Go, este capítulo te resultará útil.
- Capítulo 5, Concurrencia a escala
-
En este capítulo, tomamos los patrones que hemos aprendido y los componemos en patrones más amplios, empleados habitualmente en programas, servicios y sistemas distribuidos más grandes.
- Capítulo 6, Goroutines y el tiempo de ejecución de Go
-
Este capítulo describe cómo el tiempo de ejecución de Go gestiona la programación de goroutines. Esto es para aquellos que quieran entender el funcionamiento interno del tiempo de ejecución de Go.
- Anexo
-
El apéndice simplemente enumera varias herramientas y comandos que pueden facilitar la escritura y depuración de programas concurrentes.
Recursos en línea
Go tiene una comunidad muy activa y apasionada. Si eres nuevo en Go, anímate: te resultará fácil encontrar gente amable y servicial que te guíe en tu camino hacia Go. Aquí tienes algunos de mis recursos favoritos orientados a la comunidad para leer, obtener ayuda e interactuar con tus compañeros gofistas:
Convenciones utilizadas en este libro
En este libro se utilizan las siguientes convenciones tipográficas:
- Cursiva
-
Indica nuevos términos, URL, direcciones de correo electrónico, nombres de archivo y extensiones de archivo.
Constant width
-
Se utiliza en los listados de programas, así como dentro de los párrafos para referirse a elementos del programa como nombres de variables o funciones, bases de datos, tipos de datos, variables de entorno, sentencias y palabras clave.
Constant width bold
-
Muestra comandos u otros textos que deben ser tecleados literalmente por el usuario.
Constant width italic
-
Muestra el texto que debe sustituirse por valores proporcionados por el usuario o por valores determinados por el contexto.
Consejo
Este icono significa un consejo, sugerencia o nota general.
Advertencia
Este icono indica una advertencia o precaución.
Utilizar ejemplos de código
Todo el código contenido en este libro puede encontrarse en la página de inicio del libro, http://katherine.cox-buday.com/concurrency-in-go. Está publicado bajo la licencia MIT y puede utilizarse en esos términos.
Safari O'Reilly
Nota
Safari (antes Safari Books Online) es una plataforma de formación y referencia basada en membresías para empresas, administraciones públicas, educadores y particulares.
Los miembros tienen acceso a miles de libros, vídeos de formación, rutas de aprendizaje, tutoriales interactivos y listas de reproducción de más de 250 editoriales, como O'Reilly Media, Harvard Business Review, Prentice Hall Professional, Addison-Wesley Professional, Microsoft Press, Sams, Que, Peachpit Press, Adobe, Focal Press, Cisco Press, John Wiley & Sons, Syngress, Morgan Kaufmann, IBM Redbooks, Packt, Adobe Press, FT Press, Apress, Manning, New Riders, Jones & Bartlett y Course Technology, entre otras. Sons, Syngress, Morgan Kaufmann, IBM Redbooks, Packt, Adobe Press, FT Press, Apress, Manning, New Riders, McGraw-Hill, Jones & Bartlett y Course Technology, entre otras.
Para más información, visita http://oreilly.com/safari.
Cómo contactar con nosotros
Dirige tus comentarios y preguntas sobre este libro a la editorial:
- O'Reilly Media, Inc.
- 1005 Gravenstein Highway Norte
- Sebastopol, CA 95472
- 800-998-9938 (en Estados Unidos o Canadá)
- 707-829-0515 (internacional o local)
- 707-829-0104 (fax)
Tenemos una página web para este libro, donde se enumeran erratas, ejemplos y cualquier información adicional. Puedes acceder a esta página en http://bit.ly/concurrency-in-go.
Para hacer comentarios o preguntas técnicas sobre este libro, envía un correo electrónico a bookquestions@oreilly.com.
Para más información sobre nuestros libros, cursos, conferencias y noticias, consulta nuestro sitio web en http://www.oreilly.com.
Encuéntranos en Facebook: http://facebook.com/oreilly
Síguenos en Twitter: http://twitter.com/oreillymedia
Míranos en YouTube: http://www.youtube.com/oreillymedia
Agradecimientos
Escribir un libro es una tarea desalentadora y desafiante. Lo que tienes ante ti no habría sido posible sin un equipo de personas que me apoyaron, revisando cosas, escribiendo herramientas y respondiendo preguntas. Estoy profundamente agradecida a todos los que me ayudaron, y tienen mi más sincero agradecimiento. ¡Lo hemos hecho juntos!
Un trago no hace un verano...
Proverbio
-
Alan Donovan, que me ayudó con la propuesta original y también me ayudó a ponerme en camino.
-
Andrew Wilkins, con quien tuve la gran suerte de trabajar en Canonical. Su perspicacia, profesionalidad e inteligencia influyeron en este libro, y sus críticas lo mejoraron.
-
Ara Pulido, que me ayudó a ver este libro con los ojos de un nuevo gopher.
-
Dawn Schanafelt, mi editora, que contribuyó en gran medida a que este libro se leyera con la mayor claridad posible. Agradezco especialmente su paciencia (y la de O'Reilly) mientras la vida ponía algunas dificultades en mi camino al escribir este libro.
-
Francesc Campoy, que me ayudó a asegurarme de que siempre tuviera en mente a los más nuevos.
-
Ivan Daniluk, cuya atención al detalle e interés por la concurrencia contribuyeron a garantizar que éste sea un libro completo y útil.
-
Yasushi Shoji, que escribió
org-asciidoc
, una herramienta que utilicé para exportar artefactos AsciiDoc del modo Org. No sabía que estaba ayudando a escribir un libro, ¡pero siempre respondía muy bien a los informes de errores y a las preguntas! -
A los mantenedores de Go: gracias por vuestra dedicación.
-
A los mantenedores del modo Org, el modo GNU Emacs con el que está escrito este libro. Toda mi vida está en org; en serio, gracias a todos.
-
Los mantenedores de GNU Emacs, el editor de texto con el que escribí este libro. No puedo pensar en una herramienta que haya servido más de palanca en mi vida.
-
Las bibliotecas públicas de San Luis, donde se escribió la mayor parte de este libro.
Get Concurrencia en Go now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.