Multithreaded executor behavior #2360
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.
Hello,
while working on the multithreaded executor, I encountered a problem.
Take the following configuration:
One node, with two timers, each timer with a period of 1000ms, and an execution time of 1000ms per timer. Both timers are in a mutually exclusive callback group.
Due to the current structure of the multithreaded executor, only one timer will be executed, while the other one will never be executed.
I suppose this is due to one thread updating the wait set, while the other one is blocked by the execution. By the time the thread that occupies the callback group is finished, the task of the just finished timer is ready again, and the second timer task is never executed.
In my changes, I updated the behavior of the multithreaded executor, so that the wait set is only updated once all the work that is available is done. This guarantees that all callbacks in a mutually exclusive callback group will be executed, even if some of them are ready again. This change should align the behavior of the multithreaded executor more with the behavior of the single threaded executor.
If you have any suggestions or feedback for this idea, please let me know.