You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add AreaDependentQueue
AreaDependentQueue is capable of dynamically ordering tasks
scheduled (possibly) onto overlapping x/y coordinates. For
a given coordinate, only one task at most is being executed.
Add stream id (long) to PrioritisedExecutor
This will be later used by thread pools that may perform different
scheduling depending on the stream id. For example, it may be
possible that tasks with a lower stream id are executed before
other tasks, or that tasks with different stream ids are shared
equally. At this stage, I've not yet decided.
Add BalancedPrioritisedThreadPool
This thread pool will share time equally between groups but will
not share time equally between queues within the groups. The task
execution order is determined by priority then by suborder. This
results is more fair task execution as determined by queue size
(i.e more tasks in one queue should generally receive more time).
Rewrite spinwait logic in PrioritisedQueueExecutorThread
Do not yield and park immediately upon emptying the queue
Instead, set the parked field. This allows wakeup to occur if
a task is queued while short parking.
Only spinwait if configured to
Fix PrioritisedQueueExecutorThread#close(wait=true, ...) not waiting
Need to only break when the thread dies. Forgot to invert the alive
check.
Add COWArrayList
The underlying array is not Object[] but is actually of the
element type. The list also works only through reference equality
as well. The array is retrievable for faster iteration.
Change coordinates from x/z to x/y coordinates in ReentrantAreaLock
Use AtomicLong for size is ConcurrentLong2ReferenceChainedHashTable
We really don't see any benefit from using LongAdder since on
additions we need to sum over the entire adder (defeating the
purpose of splitting the additions for parallelism). There should
be a minor improvement in put/remove performance, even in contended
scenarios.
Remove ConcurrentUtil#rethrow
Use ThrowUtil#throwUnchecked
Remove PrioritisedThreadPool
Use BalancedPrioritisedThreadPool, or in the future even
StreamOrderedThreadPool
Remove Validate class
Add ConcurrentLong2LongChainedHashTable
Only use acquire ordering when retrieving bin entries for concurrent tables
This doesn't improve performance on x86. However, on other platforms
there may be a performance improvement.