После (кратко) обзор GO язык спецификаций, эффективного идти, и модель памяти уйти, я'м все еще немного непонятно, как каналы идут работать под капотом.
Какие структуры они? Они действуют вроде как потокобезопасные очереди /массив.
Их реализация зависит от архитектуры?
Исходный файл для каналов (с вашего GO источник корневого кода) в /ГРЦ/ПКГ/выполнения/тян.пойти.
hchan
является центральной структурой данных для канала, отправлять и получать связанные списки (удерживая указатель на их горутина и элемент данных) и "закрытые" флаг. Там'ы внедренные структуры замок
, который определен в runtime2.поди, что служит мьютекс (фьютекс) или семафора в зависимости от операционной системы. Блокировка реализация в lock_futex.идти (Линукс/Стрекоза/некоторые БСД) или lock_sema.идем (для Windows/OSX с/Plan9/некоторые БСД), на основе тегов строить.
Операции Канал осуществляются в этот чан.идите файлов, так что вы можете видеть makechan, отправлять и получать операций, а также выбрать конструкцию, закрыть, лен и крышки встроенные модули.
За многие подробное описание на внутренние каналы, вы должны прочитать идут каналы на стероидах сам Дмитрий Вьюков (идут ядро Дев, горутин, планировщик и каналов, между прочим).
Вот это хороший разговор, который описывает примерно как реализовано каналы:
Поговорите описание:
GopherCon 2017: Kavya Джоши - понимание каналов
каналы обеспечивают простой механизм для горутины для общения, а мощная конструкция, чтобы создавать сложные модели параллелизма. Мы будем углубляться в внутреннее устройство каналов и канала, в том числе, как они'вновь, поддерживаемые средой выполнения планировщика и управления памятью.