| libnbaio (for "Non-Blocking Audio I/O") was originally intended to |
| be a purely non-blocking API. It has evolved to now include |
| a few blocking implementations of the interface. |
| |
| Note: as used here, "short transfer count" means the return value for |
| read() or write() that indicates the actual number of successfully |
| transferred frames is less than the requested number of frames. |
| |
| Pipe |
| ---- |
| supports 1 writer and N readers |
| |
| no mutexes, so safe to use between SCHED_NORMAL and SCHED_FIFO threads |
| |
| writes: |
| non-blocking |
| never return a short transfer count |
| overwrite data if not consumed quickly enough |
| |
| reads: |
| non-blocking |
| return a short transfer count if not enough data |
| will lose data if reader doesn't keep up |
| |
| MonoPipe |
| -------- |
| supports 1 writer and 1 reader |
| |
| no mutexes, so safe to use between SCHED_NORMAL and SCHED_FIFO threads |
| |
| write are optionally blocking: |
| if configured to block, then will wait until space available before returning |
| if configured to not block, then will return a short transfer count |
| and will never overwrite data |
| |
| reads: |
| non-blocking |
| return a short transfer count if not enough data |
| never lose data |
| |