> This call will block if the queue is full.

is that true? Looks like it just appends to the `@array`. We cannot count on the relationship between `q.enqueue` and `q.full?` as the two are not tied together or guaranteed to be atomic, you could have `q.enqueue` on the same queue called via a hundred threads before `flush if q.full?` is called.