xstream-util 2.0.0

A command line tool to split a stream to child processes
Documentation
# xstream

[![crates.io](https://img.shields.io/crates/v/xstream-util)](https://crates.io/crates/xstream-util)
[![documentation](https://docs.rs/xstream-util/badge.svg)](https://docs.rs/xstream-util)
[![license](https://img.shields.io/github/license/erikbrinkman/xstream)](LICENSE)
[![tests](https://github.com/erikbrinkman/xstream/actions/workflows/rust.yml/badge.svg)](https://github.com/erikbrinkman/xstream/actions/workflows/rust.yml)

A command line tool to split a stream by a delimiter and pipe each section to a child process.

Each chunk can be piped to a new process, with limited parallelism, or for
embarassingly parallel processing, processes can be reused.

## Installation

```
cargo install xstream-util
```

## Benchmarks

For a simple illustration of the speed up for reasonably sized streams, the following simple benchmark compares generating 1001 streams of integers and summing them with `bc`.

First, generate a null delimited set of streams with

```bash
time for I in {10000..11000}; do seq $I; echo -ne '0\0'; done
```

This stream is roughly 50M, making each stream roughly 50k.

I then piped this into `xstream` as
```bash
| time xstream -0 -w '' -- bash -c 'paste -sd+ | bc' > /dev/null
```
and `xargs` as
```bash
| time xargs -0I@ bash -c '<<< "@" head -n-1 | paste -sd+ | bc' > /dev/null
```

which on my system gives:

|  Program  |  User  | System | Elapsed |
|-----------|--------|--------|---------|
| `xstream` | 10.21s |  1.67s | 0:09.58 |
| `xargs`   | 15.72s |  2.85s | 0:14.52 |

This benchmark is a toy example, but `xstream` already provides a 30% speed up when each stream is only 50k.