RFR: 8296896: Change virtual Thread.yield to use external submit
Jaikiran Pai
jpai at openjdk.org
Wed Dec 7 06:54:20 UTC 2022
On Tue, 6 Dec 2022 10:16:38 GMT, Alan Bateman <alanb at openjdk.org> wrote:
> The implementation of Thread.yield for virtual threads is currently a "lazy submit". This means the task for the virtual thread is queued to the carrier/worker local queue without signalling other threads. This behavior can be surprising/unfair when there are tasks in the submission queues, say when a platform thread has started or unparked a virtual thread.
>
> Ron, Doug Lea, Viktor Klang and I have discussed this topic and propose to change Thread.yield to use "external submit" when the local task queue is empty, and to push to the local queue when not empty. The change improves the fairness but will of course increase the chances that repeated Thread.yield will bounce between carriers.
I'm not too familiar with the local queue and submission queues of the ForkJoinPool, but the PR description and the inline comments in the code/tests helped understand this change. With my limited knowledge of this area, this change looks OK to me.
I'm guessing the change to the existing `YieldALot` test to reduce the number of iterations from `500000` to `350000` is intentional to bring down the duration of that test?
-------------
Marked as reviewed by jpai (Reviewer).
PR: https://git.openjdk.org/jdk/pull/11533
More information about the core-libs-dev
mailing list