У меня есть канал, называемый queue
, скажем 100 в качестве размера буфера. Многие из подпрограмм могут отправлять данные на этот канал, а другая процедура идет, чтобы получать данные с этого канала. Это длительный процесс, означающий, что канал действует как трубопровод, поглощающий данные со многих концов и погружающие данные в один конец. Я делаю что-то вроде этого в приемной идти рутину:Параллельный канал передачи/приема go
for {
for data := range queue {
sink(data)
}
}
Теперь мой вопрос: что если какие-то новые данные были отправлены в буфер канала до контура диапазона закончен. Будут ли новые данные доступны для следующего цикла диапазона? Или они будут упущены, если параллелизм не будет принят во внимание в этом случае?
На ваш вопрос из [спецификации по типу чан] (http://golang.org/ref/spec#Channel_types): Один канал может использоваться в операторах посыла , операции приема и вызовы встроенных функций cap и len с помощью любого количества goroutines без дальнейшей синхронизации. Так что ничего не будет потеряно – IamNaN