+doc #16765: Clarify asyncrhonous backpressure and thread-safety

This commit is contained in:
Endre Sándor Varga 2015-07-09 10:40:20 +02:00
parent 333a006bf1
commit aa2596f088
4 changed files with 51 additions and 0 deletions

View file

@ -322,3 +322,19 @@ and continue with shutting down the entire stream.
It is not possible to emit elements from the completion handling, since completion
handlers may be invoked at any time (without regard to downstream demand being available).
Thread safety of custom processing stages
=========================================
All of the above custom stages (linear or graph) provide a few simple guarantees that implementors can rely on.
- The callbacks exposed by all of these classes are never called concurrently.
- The state encapsulated by these classes can be safely modified from the provided callbacks, without any further
synchronization.
In essence, the above guarantees are similar to what :class:`Actor`s provide, if one thinks of the state of a custom
stage as state of an actor, and the callbacks as the ``receive`` block of the actor.
.. warning::
It is **not safe** to access the state of any custom stage outside of the callbacks that it provides, just like it
is unsafe to access the state of an actor from the outside. This means that Future callbacks should **not close over**
internal state of custom stages because such access can be concurrent with the provided callbacks, leading to undefined
behavior.