librespot-golang
librespot-golang copied to clipboard
AudioFile.Read(): CPU usage unnecessarily @ 100 %
https://github.com/librespot-org/librespot-golang/blob/31669e5a889fb671269fab6b87322b3159119f90/librespot/player/audiofile.go#L104
When chunk hasn't arrived from server yet, the consumer code that is calling Read() will get 0-byte successful reads at rapid pace, until server responds. This means that the consumer is calling the read as fast as it can, millions of times a second, manifesting in 100 % CPU usage. After I inserted a 100 ms sleep in after the line I quoted, CPU usage is back to normal.
This behaviour is discouraged by the Reader interface:
Implementations of Read are discouraged from returning a zero byte count with a nil error
It doesn't say it directly, but it means that Read() is expected to block until it has data to return.