Skip to content

0.0.4

Choose a tag to compare

@Spottedleaf Spottedleaf released this 19 Sep 04:46
  • 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.