On Tue, 18 Jun 2024 21:01:15 GMT, Daniel Jeliński <[email protected]> wrote:

> 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?

src/hotspot/os/windows/os_windows.cpp line 5565:

> 5563:       prd = MAXTIMEOUT;
> 5564:     }
> 5565:     HighResolutionInterval *phri = nullptr;

@djelinski Is this even used?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/19778#discussion_r1646262838

Reply via email to