[concurrency-interest] Clarifications request for Reactive Streams Specification Rule 1.1

Pavel Rappo pavel.rappo at gmail.com
Thu Nov 2 12:49:58 EDT 2017


I think this question is both about concurrency in Java and Reactive Streams.
Thus posting it to a place where it could be seen by all interested parties.

>    Rule #1.1
>
>    The total number of onNext's signalled by a Publisher to a Subscriber MUST
>    be less than or equal to the total number of elements requested by that
>    Subscriber's Subscription at all times.
>
>    The intent of this rule is to make it clear that Publishers cannot signal
>    more elements than Subscribers have requested. There’s an implicit, but
>    important, consequence to this rule: Since demand can only be fulfilled
>    after it has been received, there’s a happens-before relationship between
>    requesting elements and receiving elements.

It sounds like it is more about causality than happens-before. Like if there is
an Subscriber.onNext call in the execution, it must be that there was at least a
single Subscription.request call in that execution earlier.

If it is really about happens-before, the rule might benefit from the following
clarification ("concurrent collections" style):

    Actions in a thread prior to requesting an item from a Subscription
    happen-before actions subsequent to receiving of that item in
    Subscriber.onNext in another thread.

However, since we don't know an element before we receive one in onNext, it can
be quite tricky to formulate that clearly.


More information about the Concurrency-interest mailing list