> We use 2 ParkEvent instances per thread. The ParkEvent objects are never 
> freed, but they are recycled when a thread dies, so the number of live 
> ParkEvent instances is proportional to the maximum number of threads that 
> were live at any time.
> 
> On Windows, the ParkEvent object wraps a kernel Event object. Kernel objects 
> are a limited and costly resource. In this PR, I replace the use of kernel 
> events with user-space synchronization.
> 
> The new implementation uses WaitOnAddress and WakeByAddressSingle methods to 
> implement synchronization. The methods are available since Windows 8. We only 
> support Windows 10 and newer, so OS support should not be a problem.
> 
> WaitOnAddress was observed to return spuriously, so I added the necessary 
> code to recalculate the timeout and continue waiting.
> 
> Tier1-5 tests passed. Performance tests were... inconclusive. For example, 
> `ThreadOnSpinWaitProducerConsumer` reported 30% better results, while 
> `LockUnlock.testContendedLock` results were 50% worse. 
> 
> Thoughts?

Daniel Jeliński has updated the pull request incrementally with one additional 
commit since the last revision:

  Update comment

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/19778/files
  - new: https://git.openjdk.org/jdk/pull/19778/files/23b70220..58403c0d

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=19778&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=19778&range=00-01

  Stats: 2 lines in 1 file changed: 0 ins; 0 del; 2 mod
  Patch: https://git.openjdk.org/jdk/pull/19778.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/19778/head:pull/19778

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

Reply via email to