Add settable promise #98
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Another question mark, I'm not sure that this PR fits with
domainslib
general design.I was playing with a lockfree MPMC queue and noticed that it would work well as a substitute for domainslib's Chan. The only catch is "what to do when the queue is empty and we want to pop?", because I would prefer to suspend only the current task, and not lock the current domain entirely as it could go do other stuff in the mean time. The simplest synchronization primitive I could think of is a mutable promise, such that the
pop
task can await it and the matchingpush
will resolve it.Chan
just yet, because it is currently independent fromTask
and either module can be used without the other -- is this intended or would it make sense to specializeChan
to maximize performances when used with tasks?A small benchmark to demonstrate that the proposed API yields more stable performances than the alternatives:
(
num_domains
is actually "+ 1" hence the drop at 9 domains :/)(cc @bartoszmodelski in case you have some thoughts on this! ^^)