--- /dev/null
+# p-throttler [![Build Status](https://secure.travis-ci.org/IndigoUnited/node-p-throttler.png)](http://travis-ci.org/IndigoUnited/node-p-throttler.png)
+
+A promise based throttler responsible for limiting execution of parallel tasks.
+The number of parallel tasks may be limited and configured per type.
+
+
+## Installation
+
+`$ npm install p-throttler`
+
+
+## API
+
+### #create(defaultConcurrency, types)
+
+Constructs a new throttler.
+
+The `defaultConcurrency` is the default maximum concurrent functions being run (-1 to specify no limits).
+The `types` allows you to specify different concurrencies for different types.
+
+Example:
+
+```js
+var throttler = PThrottler.create(15, { // or new PThrottler()
+ 'network_io': 10,
+ 'disk_io': 50
+});
+```
+
+
+### .enqueue(func, [type]): Promise
+
+Enqueues a function to be ran. The function is expected to return a promise or a value.
+The returned promise is resolved when the function finishes execution.
+
+The `type` argument is optional and can be a `string` or an array of `strings`.
+Use it to specify the type(s) associated with the function.
+
+The function will run as soon as a free slot is available for every `type`.
+If no `type` is passed or is unknown, the `defaultConcurrency` is used.
+
+The execution order is guaranteed for functions enqueued with the exact same `type` argument.
+
+Example:
+
+```js
+
+var method = function () {
+ return Q.resolve('foo');
+};
+
+var throttler = PThrottler.create(15, {
+ 'foo': 1,
+ 'bar': 2
+});
+
+// Single type, will only run when a free slot for
+// "foo" is available
+throttler.enqueue(function () {
+ return method(); // method() returns some promise
+}, 'foo')
+.then(function (value) {
+ console.log(value);
+});
+
+// Multiple type, will only run when a free slot for
+// "foo" and "bar" are available
+throttler.enqueue(function () {
+ return method(); // method() returns some promise
+}, ['foo', 'bar'])
+.then(function (value) {
+ console.log(value);
+});
+```
+
+
+### .abort(): Promise
+
+Aborts all current work being done.
+Returns a promise that is resolved when the current running functions finish to execute.
+Any function that was in the queue waiting to be ran is removed immediately.
+
+
+## License
+
+Released under the [MIT License](http://www.opensource.org/licenses/mit-license.php).