Skip to content

Releases: Tuinity/ConcurrentUtil

0.0.8

21 Dec 21:37

Choose a tag to compare

  • 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

14 Nov 01:37

Choose a tag to compare

  • Downgrade fastutil dependency

0.0.6

14 Nov 00:59

Choose a tag to compare

  • 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

19 Sep 18:48

Choose a tag to compare

  • Correctly set newTable field in ConcurrentLong2ReferenceChainedHashTable

0.0.4

19 Sep 04:46

Choose a tag to compare

  • 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
    1. 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.
    2. 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.

0.0.3

11 Jan 14:22

Choose a tag to compare

Add basic values() and entrySet() view for concurrent long map

0.0.2

04 Dec 02:54
ed6dd25

Choose a tag to compare

Initial release