title: Sleep in goroutine with busy loop
body: <p>I have a switch statement inside a goroutine which handles the playback state of audio. The switch statement looks like this (it's controlled with channels)</p>
  
  <pre><code>PlaybackLoop:
          // Poll playback status and update current song
          select {
          case &lt;-next:
              if current.next != nil {
                  current = current.next
                  break PlaybackLoop
              }
          case &lt;-prev:
              if current.prev != nil {
                  current = current.prev
              }
              break PlaybackLoop
          case &lt;-done:
              return err
          default:
              time.Sleep(50 * time.Millisecond)
  </code></pre>
  
  <p>When no channels have inputs, the <code>default</code> case <code>sleep</code>s for 50 milliseconds. My justification for this is that I do not to refresh the UI or check media state etc (the stuff that happens in the <code>PlayBackLoop</code> before the switch statement) unnecessarily.</p>
  
  <p>Is <strong>sleeping</strong> and appropriate way of making the goroutine more efficient? (by making less checks to the media player state?) Or is this assumptions wholly unfounded, and a simple <code>continue</code> would suffice?</p>