You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Lock-free list implementation is considerably simplified, taking into
account a limited number of operations that it needs to support.
* prev pointers in the list are not marked for removal, since we
don't need to support linearizable backwards iteration.
* helpDelete method is completely removed. All "delete-helping" is
performed only by correctPrev method.
* correctPrev method bails out when the node it works on is removed to
reduce contention during concurrent removals.
* Special open methods "isRemoved" and "nextIfRemoved" are introduced
and are overriden in list head class (which is never removed).
This ensures that on long list "removeFist" operation (touching head)
does not interfere with "addLast" (touch tail). There is still
sharing of cache-lines in this case, but no helping between them.
All in all, this improvement reduces the size of implementation code
and makes it considerably faster. Operations on LinkedListChannel are
now much faster (see timings of ChannelSendReceiveStressTest).
A known (at still open) problem is that in ConflatedChannel a receiver
can starve in scenarios with multiple senders, constantly trying to help
them. Fixing this starvation is out of the scope of this improvement.
0 commit comments