Releases: Tuinity/ConcurrentUtil
Releases · Tuinity/ConcurrentUtil
0.0.8
- Rename the old ScheduledTaskThreadPool class to EDFSchedulerThreadPool and remove its deprecation.
- Abstract scheduler interface to SchedulableTick and Scheduler
- Move DEADLINE_NOT_SET to TimeUtil
- Add a simple interface, OSNuma, to interact with the OS's NUMA and affinity APIs
- Add a new work stealing scheduler (StealingScheduledThreadPool) which, unlike the EDF scheduler, supports NUMA aware scheduling, intermediate task execution, and dynamic thread adjustment.
0.0.7
- Downgrade fastutil dependency
0.0.6
- Notify all workers when adjusting thread count
- Ensure queued task in PrioritisedTaskQueue is always present in queue
This release should fix BalancedPrioritisedThreadPool becoming idle when there were tasks still left to execute.
0.0.5
- Correctly set newTable field in ConcurrentLong2ReferenceChainedHashTable
0.0.4
- 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
- Do not yield and park immediately upon emptying the queue
- 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.
0.0.3
Add basic values() and entrySet() view for concurrent long map