Mi trovo spesso ad usare i canali per far smettere le cose. In questi casi il canale viene utilizzato esclusivamente come mezzo di segnalazione e nessuno dei dati viene effettivamente utilizzato.Quale tipo di canale utilizza la quantità minima di memoria in Go?
Ad esempio:
package main
import (
"fmt"
"time"
)
func routine(stopChan chan bool) {
fmt.Println("goroutine: I've started!")
<-stopChan
fmt.Println("goroutine: Cya'round pal")
}
func main() {
fmt.Println("main: Sample program run started")
stopChan := make(chan bool)
go routine(stopChan)
fmt.Println("main: Fired up the goroutine")
stopChan <- true
time.Sleep(1 * time.Second)
fmt.Println("main: Sample program run finished")
}
// Sample output:
//
// main: Sample program run started
// main: Fired up the goroutine
// goroutine: I've started!
// goroutine: Cya'round pal
// main: Sample program run finished
Run/view it se vi piace al parco giochi golang.
La mia domanda è:
Quale tipo di canale ha il più leggero ingombro di memoria in Go?
ad es. Un bool chan richiederà un overhead minore rispetto a una struct vuota {} chan?
chan bool
chan byte
chan interface{}
chan struct{}
...
qualcos'altro?
Non ho verificato nella sorgente, ma mi aspetto che il sovraccarico del canale stesso domini l'effetto di byte, bool o struct {} per un canale non bufferizzato. – Volker