Verificados capitulos 1 y 2
This commit is contained in:
12
es/02.7.md
12
es/02.7.md
@@ -51,7 +51,7 @@ El manejador de tareas solo usa un hilo para correr todas la goroutines, lo que
|
||||
|
||||
## Canales
|
||||
|
||||
goroutines son ejecutadas en el mismo espacio de direcciones de memoria, por lo que se tiene que mantener sincronizadas si buscas acceder a la memoria compartida. ¿Como nos comunicamos entre diferentes goroutines? Go utiliza un muy buen mecanismo de comunicación llamado `canales`(channel). Los `canales` son como dos tuberías (o pipes) en la shell de Unix: usando canales para enviar o recibir los datos. El unico tipo de datos que se puede usar en los canales es el tipo `channel` y la palabra reservada para eso es `chan`. Tenga en cuenta que para crear un nuevo `channel` debemos usar la palabra reservada `make`.
|
||||
goroutines son ejecutadas en el mismo espacio de direcciones de memoria, por lo que se tiene que mantener sincronizadas si buscas acceder a la memoria compartida. ¿Cómo nos comunicamos entre diferentes goroutines? Go utiliza un muy buen mecanismo de comunicación llamado `canales`(channel). Los `canales` son como dos tuberías (o pipes) en la shell de Unix: usando canales para enviar o recibir los datos. El unico tipo de datos que se puede usar en los canales es el tipo `channel` y la palabra reservada para eso es `chan`. Ten en cuenta que para crear un nuevo `channel` debemos usar la palabra reservada `make`.
|
||||
```
|
||||
ci := make(chan int)
|
||||
cs := make(chan string)
|
||||
@@ -91,7 +91,7 @@ Enviando y recibimos los datos por defecto en bloques, por lo que es mucho mas f
|
||||
|
||||
## Buffered channels
|
||||
|
||||
Anteriormente hice una introducción sobre canales non-buffered channels (non-buffered channels), y Go también tiene 'buffered channels' que pueden guardar mas de un elemento. Por ejemplo, `ch := make(chan bool, 4)`, aca creamos un canal que puede guardar 4 elementos booleanos. Por lo tanto con este canal, somos capaces de enviar 4 elementos sin el bloqueo, pero la goroutine se bloqueará cuando intente enviar un quito elemento y la goroutine no lo recibirá.
|
||||
Anteriormente hice una introducción sobre canales non-buffered channels (non-buffered channels), y Go también tiene 'buffered channels' que pueden guardar mas de un elemento. Por ejemplo, `ch := make(chan bool, 4)`, aquí creamos un canal que puede guardar 4 elementos booleanos. Por lo tanto con este canal, somos capaces de enviar 4 elementos sin el bloqueo, pero la goroutine se bloqueará cuando intente enviar un quinto elemento y la goroutine no lo recibirá.
|
||||
```
|
||||
ch := make(chan type, n)
|
||||
|
||||
@@ -147,7 +147,7 @@ Otra cosa que deber tener que recordar es que los canales son diferentes a los a
|
||||
|
||||
## Select
|
||||
|
||||
En los ejemplos anteriores, nosotros usamos solo un canal, pero ¿como podemos lidiar con mas de un canal? Go tiene la palabra reservada llamada `select` para escuchar muchos canales.
|
||||
En los ejemplos anteriores, nosotros usamos solo un canal, pero ¿cómo podemos lidiar con más de un canal? Go tiene la palabra reservada llamada `select` para escuchar muchos canales.
|
||||
|
||||
`select` de forma predeterminada es bloqueante, y este continua la ejecución solo cuando un canal tiene datos o recibió datos. Si varios canales están listos para usarse al mismo tiempo, select elegirá cual ejecutar al azar.
|
||||
```
|
||||
@@ -179,9 +179,9 @@ En los ejemplos anteriores, nosotros usamos solo un canal, pero ¿como podemos l
|
||||
}()
|
||||
fibonacci(c, quit)
|
||||
}
|
||||
|
||||
```
|
||||
`select` también tiene `default`, al igual que el `switch`. Cuando todos los canales no están listos para ser usados, ejecuta el default (no espera mas por el canal).
|
||||
|
||||
```
|
||||
select {
|
||||
case i := <-c:
|
||||
// usa i
|
||||
@@ -237,6 +237,6 @@ El paquete `runtime` tiene algunas funciones para hacer frente a las goroutines.
|
||||
|
||||
## Enlaces
|
||||
|
||||
- [Indice](preface.md)
|
||||
- [Índice](preface.md)
|
||||
- Sección anterior: [interfaces](02.6.md)
|
||||
- Siguiente sección: [Resumen](02.8.md)
|
||||
|
||||
Reference in New Issue
Block a user