diff options
| author | Godmar Back <godmar@gmail.com> | 2021-07-06 15:50:42 -0400 |
|---|---|---|
| committer | Godmar Back <godmar@gmail.com> | 2021-07-06 15:50:42 -0400 |
| commit | fb464a3b39bd4657bbf98a6d445cb12a14dd7ed6 (patch) | |
| tree | e0f2b8b95a8b79c12e5040be757ec7cd2f7281e5 /library/std/src | |
| parent | d04ec4735810553224eb5eaf948ec78f84eac06c (diff) | |
| download | rust-fb464a3b39bd4657bbf98a6d445cb12a14dd7ed6.tar.gz rust-fb464a3b39bd4657bbf98a6d445cb12a14dd7ed6.zip | |
rewrote documentation for thread::yield_now()
The old documentation suggested the use of yield_now for repeated polling instead of discouraging it; it also made the false claim that channels are implementing using yield_now. (They are not, except for a corner case).
Diffstat (limited to 'library/std/src')
| -rw-r--r-- | library/std/src/thread/mod.rs | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/library/std/src/thread/mod.rs b/library/std/src/thread/mod.rs index f7e79141903..da2d1160493 100644 --- a/library/std/src/thread/mod.rs +++ b/library/std/src/thread/mod.rs @@ -651,22 +651,23 @@ pub fn current() -> Thread { /// Cooperatively gives up a timeslice to the OS scheduler. /// -/// This is used when the programmer knows that the thread will have nothing -/// to do for some time, and thus avoid wasting computing time. -/// -/// For example when polling on a resource, it is common to check that it is -/// available, and if not to yield in order to avoid busy waiting. -/// -/// Thus the pattern of `yield`ing after a failed poll is rather common when -/// implementing low-level shared resources or synchronization primitives. -/// -/// However programmers will usually prefer to use [`channel`]s, [`Condvar`]s, -/// [`Mutex`]es or [`join`] for their synchronization routines, as they avoid -/// thinking about thread scheduling. -/// -/// Note that [`channel`]s for example are implemented using this primitive. -/// Indeed when you call `send` or `recv`, which are blocking, they will yield -/// if the channel is not available. +/// This calls the underlying OS scheduler's yield primitive, signaling +/// that the calling thread is willing to give up its remaining timeslice +/// so that the OS may schedule other threads on the CPU. +/// +/// A drawback of yielding in a loop is that if the OS does not have any +/// other ready threads to run on the current CPU, the thread will effectively +/// busy-wait, which wastes CPU time and energy. +/// +/// Therefore, when waiting for events of interest, a programmer's first +/// choice should be to use synchronization devices such as [`channel`]s, +/// [`Condvar`]s, [`Mutex`]es or [`join`] since these primitives are +/// implemented in a blocking manner, giving up the CPU until the event +/// of interest has occurred which avoids repeated yielding. +/// +/// `yield_now` should thus be used only rarely, mostly in situations where +/// repeated polling is required because there is no other suitable way to +/// learn when an event of interest has occurred. /// /// # Examples /// |
