@@ -651,22 +651,23 @@ pub fn current() -> Thread {
651
651
652
652
/// Cooperatively gives up a timeslice to the OS scheduler.
653
653
///
654
- /// This is used when the programmer knows that the thread will have nothing
655
- /// to do for some time, and thus avoid wasting computing time.
656
- ///
657
- /// For example when polling on a resource, it is common to check that it is
658
- /// available, and if not to yield in order to avoid busy waiting.
659
- ///
660
- /// Thus the pattern of `yield`ing after a failed poll is rather common when
661
- /// implementing low-level shared resources or synchronization primitives.
662
- ///
663
- /// However programmers will usually prefer to use [`channel`]s, [`Condvar`]s,
664
- /// [`Mutex`]es or [`join`] for their synchronization routines, as they avoid
665
- /// thinking about thread scheduling.
666
- ///
667
- /// Note that [`channel`]s for example are implemented using this primitive.
668
- /// Indeed when you call `send` or `recv`, which are blocking, they will yield
669
- /// if the channel is not available.
654
+ /// This calls the underlying OS scheduler's yield primitive, signaling
655
+ /// that the calling thread is willing to give up its remaining timeslice
656
+ /// so that the OS may schedule other threads on the CPU.
657
+ ///
658
+ /// A drawback of yielding in a loop is that if the OS does not have any
659
+ /// other ready threads to run on the current CPU, the thread will effectively
660
+ /// busy-wait, which wastes CPU time and energy.
661
+ ///
662
+ /// Therefore, when waiting for events of interest, a programmer's first
663
+ /// choice should be to use synchronization devices such as [`channel`]s,
664
+ /// [`Condvar`]s, [`Mutex`]es or [`join`] since these primitives are
665
+ /// implemented in a blocking manner, giving up the CPU until the event
666
+ /// of interest has occurred which avoids repeated yielding.
667
+ ///
668
+ /// `yield_now` should thus be used only rarely, mostly in situations where
669
+ /// repeated polling is required because there is no other suitable way to
670
+ /// learn when an event of interest has occurred.
670
671
///
671
672
/// # Examples
672
673
///
0 commit comments