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.

-------------

Commit messages:
 - Reduce instanceof checks
 - Update
 - Initial commit

Changes: https://git.openjdk.org/jdk/pull/11533/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=11533&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8296896
  Stats: 188 lines in 3 files changed: 161 ins; 12 del; 15 mod
  Patch: https://git.openjdk.org/jdk/pull/11533.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/11533/head:pull/11533

PR: https://git.openjdk.org/jdk/pull/11533

Reply via email to