aleph.flow

acquire

(acquire p k)
Acquires an object from the pool for key `k`, returning a deferred containing the object.  May
throw a `java.util.concurrent.RejectedExecutionException` if there are too many pending acquires.

dispose

(dispose p k obj)
Disposes of a pooled object which is no longer valid.

fixed-thread-executor

(fixed-thread-executor num-threads)(fixed-thread-executor num-threads options)
Returns an executor which has a fixed number of threads.

instrumented-executor

(instrumented-executor {:keys [thread-factory queue-length stats-callback sample-period control-period controller metrics initial-thread-count onto?], :or {initial-thread-count 1, sample-period 25, control-period 10000, metrics (EnumSet/allOf Stats$Metric), onto? true}})
Returns a `java.util.concurrent.ExecutorService`, using [Dirigiste](https://github.com/ztellman/dirigiste).

|:---|:----
| `thread-factory` | an optional `java.util.concurrent.ThreadFactory` that creates the executor's threads. |
| `queue-length` | the maximum number of pending tasks before `.execute()` begins throwing `java.util.concurrent.RejectedExecutionException`, defaults to `0`.
| `stats-callback` | a function that will be invoked every `control-period` with the relevant statistics for the executor.
| `sample-period` | the interval, in milliseconds, between sampling the state of the executor for resizing and gathering statistics, defaults to `25`.
| `control-period` | the interval, in milliseconds, between use of the controller to adjust the size of the executor, defaults to `10000`.
| `controller` | the Dirigiste controller that is used to guide the pool's size.
| `metrics` | an `EnumSet` of the metrics that should be gathered for the controller, defaults to all.
| `initial-thread-count` | the number of threads that the pool should begin with.
| `onto?` | if true, all streams and deferred generated in the scope of this executor will also be 'on' this executor.

instrumented-pool

(instrumented-pool {:keys [generate destroy stats-callback max-queue-size sample-period control-period controller], :or {sample-period 10, control-period 10000, max-queue-size 65536}})
Returns a [Dirigiste](https://github.com/ztellman/dirigiste) object pool, which can be interacted
with via `acquire`, `release`, and `dispose`.

|:---|:----
| `generate` | a single-arg funcion which takes a key, and returns an object which should be non-equal to any other generated object |
| `destroy` | an optional two-arg function which takes a key and object, and releases any associated resources |
| `stats-callback` | a function which will be invoked every `control-period` with a map of keys onto associated statistics |
| `max-queue-size` | the maximum number of pending acquires per key that are allowed before `acquire` will start to throw a `java.util.concurrent.RejectedExecutionException`.
| `sample-period` | the interval, in milliseconds, between sampling the state of the pool for resizing and gathering statistics, defaults to `10`.
| `control-period` | the interval, in milliseconds, between use of the controller to adjust the size of the pool, defaults to `10000`.
| `controller` | a Dirigiste controller that is used to gide the pool's size.

release

(release p k obj)
Releases an object for key `k` back to the pool.

utilization-executor

(utilization-executor utilization)(utilization-executor utilization max-threads)(utilization-executor utilization max-threads options)
Returns an executor which sizes the thread pool according to target utilization, within
`[0,1]`, up to `max-threads`.  The `queue-length` for this executor is always `0`, and by
default has an unbounded number of threads.