Używając kanału buforowanego, jak zmierzyć ile elementów znajduje się w kanale? Na przykład, tworzę i wysyłanie na kanale tak:Liczba elementów w kanale
send_ch := make(chan []byte, 100)
// code
send_ch <- msg
Chcę zmierzyć ile wiad są w kanale send_ch.
Jestem świadomy, że ze względu na współbieżność pomiar nie będzie dokładny, ponieważ między pomiarem a działaniem może wystąpić przeczenie (np. Omówione w tym filmie Google I/O 2012 - Go Concurrency Patterns). Użyję tego do kontroli przepływu między producentami i konsumentami, tzn. Gdy przejdę przez wysoki znak wodny, zmieniam zachowanie, aż przejdę z powrotem przez niski znak wodny.
Dzięki Artem. To nieoczekiwane użycie len - oczekiwałbym, że zwróci pojemność kanału, a nie liczbę elementów w nim! Dobrze wiedzieć, jeszcze raz dziękuję. –
Jeśli chciałbyś pojemność, to wbudowana funkcja 'cap' zrobiłaby to. – ANisus