summaryrefslogtreecommitdiffstats
path: root/tokio
diff options
context:
space:
mode:
authorCarl Lerche <me@carllerche.com>2020-10-13 15:07:10 -0700
committerGitHub <noreply@github.com>2020-10-13 15:07:10 -0700
commit22fa88329645e7e819601d3dac8f0afafbca824f (patch)
tree94bc2dce60a0798e5fe2b0cdf3bf9a2e19047bd9 /tokio
parent00b6127f2ed3125f8b305ab4fd9bb90e99762785 (diff)
rt: tweak spawn_blocking docs (#2955)
Diffstat (limited to 'tokio')
-rw-r--r--tokio/src/task/blocking.rs43
1 files changed, 21 insertions, 22 deletions
diff --git a/tokio/src/task/blocking.rs b/tokio/src/task/blocking.rs
index 4c14db1b..88ba678b 100644
--- a/tokio/src/task/blocking.rs
+++ b/tokio/src/task/blocking.rs
@@ -54,31 +54,30 @@ cfg_rt_multi_thread! {
/// Runs the provided closure on a thread where blocking is acceptable.
///
/// In general, issuing a blocking call or performing a lot of compute in a
-/// future without yielding is not okay, as it may prevent the executor from
-/// driving other futures forward. This function runs the provided closure
-/// on a thread dedicated to blocking operations. See the [CPU-bound tasks
-/// and blocking code][blocking] section for more information.
+/// future without yielding is problematic, as it may prevent the executor from
+/// driving other futures forward. This function runs the provided closure on a
+/// thread dedicated to blocking operations. See the [CPU-bound tasks and
+/// blocking code][blocking] section for more information.
///
-/// Tokio will spawn more blocking threads when they are requested through
-/// this function until the upper limit configured on the [`Builder`] is
-/// reached. This limit is very large by default, because `spawn_blocking` is
-/// often used for various kinds of IO operations that cannot be performed
-/// asynchronously. When you run CPU-bound code using `spawn_blocking`, you
-/// should keep this large upper limit in mind; to run your CPU-bound
-/// computations on only a few threads, you should use a separate thread
-/// pool such as [rayon] rather than configuring the number of blocking
-/// threads.
+/// Tokio will spawn more blocking threads when they are requested through this
+/// function until the upper limit configured on the [`Builder`] is reached.
+/// This limit is very large by default, because `spawn_blocking` is often used
+/// for various kinds of IO operations that cannot be performed asynchronously.
+/// When you run CPU-bound code using `spawn_blocking`, you should keep this
+/// large upper limit in mind. When running many CPU-bound computations, a
+/// semaphore or some other synchronization primitive should be used to limit
+/// the number of computation executed in parallel. Specialized CPU-bound
+/// executors, such as [rayon], may also be a good fit.
///
-/// This function is intended for non-async operations that eventually
-/// finish on their own. If you want to spawn an ordinary thread, you should
-/// use [`thread::spawn`] instead.
+/// This function is intended for non-async operations that eventually finish on
+/// their own. If you want to spawn an ordinary thread, you should use
+/// [`thread::spawn`] instead.
///
-/// Closures spawned using `spawn_blocking` cannot be cancelled. When you
-/// shut down the executor, it will wait indefinitely for all blocking
-/// operations to finish. You can use [`shutdown_timeout`] to stop waiting
-/// for them after a certain timeout. Be aware that this will still not
-/// cancel the tasks — they are simply allowed to keep running after the
-/// method returns.
+/// Closures spawned using `spawn_blocking` cannot be cancelled. When you shut
+/// down the executor, it will wait indefinitely for all blocking operations to
+/// finish. You can use [`shutdown_timeout`] to stop waiting for them after a
+/// certain timeout. Be aware that this will still not cancel the tasks — they
+/// are simply allowed to keep running after the method returns.
///
/// Note that if you are using the single threaded runtime, this function will
/// still spawn additional threads for blocking operations. The basic