README.md

BlockingQueue
=============

[![Build Status](https://semaphoreci.com/api/v1/projects/019de5e9-689e-4c1c-b5ba-3242e44ab483/455080/badge.svg)](https://semaphoreci.com/joekain/blockingqueue) [![Inline docs](http://inch-ci.org/github/joekain/BlockingQueue.svg?branch=master)](http://inch-ci.org/github/joekain/BlockingQueue)

BlockingQueue is a simple queue implemented as a GenServer.  It has a fixed
maximum length established when it is created.

The queue is designed to decouple, but limit, the latency between a producer and
consumer.  When pushing to a full queue the `push` operation blocks
preventing the producer from making progress until the consumer catches up.
Likewise, when calling `pop` on an empty queue the call blocks until there
is work to do.

## Installation

Add a dependency in your mix.exs:

```elixir
deps: [{:blocking_queue, "~> 1.0.0"}]
```

## Examples

A simple example:

```elixir
{:ok, pid} = BlockingQueue.start_link(5)
BlockingQueue.push(pid, "Hi")
BlockingQueue.pop(pid) # should return "Hi"
```

The queue is designed to be used from more complex examples in which the
producer and consumer are in separate processes and run assynchronously to each
other.

## Contribute

Just fork the repo, make your change, and send me a pull request.