// TODO since we're not using crossbeam channel's recv(), we don't get
// the benefit of yielding the thread when the channel is empty.
// Performance opportunities:
// - implement or use crossbeam's Backoff to yield the thread or spin
// when the channel is empty
// - park the thread and use signal mechanism to wake up the thread when
// there's a new task