Kanał buforowy Go jest w istocie kolejką FIFO bezpieczną dla wątków. (Zobacz Is it possible to use Go's buffered channel as a thread-safe queue?)Czy buforowany kanał Is Go jest bez blokady?
Zastanawiam się, jak to jest realizowane. Czy jest on bezpieczny jak opisano w Is there such a thing as a lockless queue for multiple read or write threads??
greping w Go katalogu src (grep -r Lock .|grep chan
) daje następujący wynik:
./pkg/runtime/chan.c: Lock;
./pkg/runtime/chan_test.go: m.Lock()
./pkg/runtime/chan_test.go: m.Lock() // wait
./pkg/sync/cond.go: L Locker // held while observing or changing the condition
Nie należy blokowania na moim komputerze (MacOS Intel x86_64) chociaż. Czy jest jakiś oficjalny zasób, aby to potwierdzić?
Dzięki! Jakieś pomysły na temat tego, dlaczego nie są zaimplementowane jako wolne od blokady? –
"Lockfree" nie oznacza lepszej wydajności. Łatwiej jest też wnioskować o blokadach. Metoda blokady jest prawdopodobnie szybsza, gdy występuje duża rywalizacja. –
Dzięki, @ stephen-weinberg. Teraz ma to więcej sensu. –