reactor-core/src/main/java/reactor/core/publisher/EventLoopProcessor.java
static long getAndSub(RingBuffer.Sequence sequence, long toSub) {
		long r, u;
		do {
			r = sequence.getAsLong();
			if (r == 0 || r == Long.MAX_VALUE) {
				return r;
			}
			u = Operators.subOrZero(r, toSub);
		}
		while (!sequence.compareAndSet(r, u));

		return r;
	}
static long getAndSub(RingBuffer.Sequence sequence, long toSub) {
		long r, u;
		do {
			r = sequence.getAsLong();
			if (r == 0 || r == Long.MAX_VALUE) {
				return r;
			}
			u = Operators.subOrZero(r, toSub);
		}
		while (!sequence.compareAndSet(r, u));

		return r;
	}
Concurrent subtraction bound to 0 and Long.MAX_VALUE. Any concurrent write will
"happen" before this operation.

@param sequence current sequence to update
@param toSub delta to sub

@return value before subscription, 0 or Long.MAX_VALUE