Wie Gehen Kanälen umgesetzt?
Nach (kurzer) Prüfung der Go Sprache spec, effektiv Gehen, und die Gehen-Speicher-Modell, ich bin immer noch ein wenig unklar, wie es zu Gehen-Kanäle arbeiten unter der Haube.
Welche Art von Struktur sind Sie? Sie wirken wie eine Art von thread-sicheren queue /array.
Ihre Umsetzung hängt von der Architektur?
- Haben Sie einen Blick auf diesem Artikel
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Quellcode-Datei für die Kanäle ist (von Ihr gehen source code root) in /src/pkg/runtime/chan.gehen.
hchan
ist die zentrale Datenstruktur, die für einen Kanal mit senden und empfangen von verknüpften Listen (hält einen Zeiger auf Ihre goroutine und der Daten-element) und eineclosed
Flagge. Es gibt eineLock
eingebettete Struktur, definiert in runtime2.gehen und dient als mutex (futex) oder semaphore je nach OS. Die Verriegelung Umsetzung ist in lock_futex.gehen (Linux/Dragonfly/Einige BSD) oder lock_sema.go (Windows/OSX/Plan9/Einige BSD), basierend auf der build-tags.Kanal Vorgänge sind alle implementiert, die in diesem chan.go-Datei, so dass Sie sehen können, die makechan, senden und empfangen von Operationen, sowie das auswählen, konstruieren, schließen, len und cap built-ins.
Für eine große in-depth-Erklärung über das Innenleben von Kanälen, die Sie haben zu Lesen Gehen Kanäle auf Steroiden von Dmitry Vyukov selbst (Gehen-core-dev, goroutines, - Planer und-Kanäle unter anderem).
Hier ist ein guter Vortrag, der beschreibt in etwa, wie die Kanäle implementiert werden:
https://youtu.be/KBZlN0izeiY
Talk Beschreibung: