apool

generic pool

npm install apool
12 downloads in the last week
19 downloads in the last month

apool

generic object pool for node.

Installation

$ npm install apool

API

pool(max)

Initialize a new Pool with optional max.

#max(max)

Set max objects that the pool can hold.

#constructor(fn)

Set the constructor that the pool will use when it needs more objects.

#destructor(fn)

Set the destructor that will be used to destroy objects.

#min(n)

Set the min number of objects that will remain in the pool, defaulted to whatever is passed to populate().

#length()

Get the length() of objects (including used ones).

#populate(n[, fn])

Populate n objects with optional fn(err).

#acquire(fn[, timeout])

Acquire an object with fn(err, obj) and optional timeout defaulting to 500ms.

#return(obj)

Return an object to the pool.

Events
  • add, emitted when an object is added.
  • return, emitted when an object is returned.
  • acquired, emitted when an object is acquired.
  • populate, emitted after populate(n).

Example

See ./example, there are two real-world examples using phantomjs with a pool of page() objects, benchmarking each with wrk yields:

no-pool.js

Running 30s test @ http://localhost:3000/
  12 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   457.23ms    9.24ms 459.79ms   97.25%
    Req/Sec     0.67      3.22    18.00     95.50%
  336 requests in 30.01s, 62.02KB read
  Socket errors: connect 0, read 0, write 0, timeout 1344
Requests/sec:     11.20
Transfer/sec:      2.07KB

pool.js

Running 30s test @ http://localhost:3000/
  12 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   310.84ms   35.91ms 385.16ms   89.66%
    Req/Sec    25.23      4.51    38.00     80.32%
  9218 requests in 30.01s, 1.66MB read
Requests/sec:    307.16
Transfer/sec:     56.69KB

Tests

$ make test

License

(MIT)

npm loves you