# Channel Benchmark Results

This documents lists several benchmark results for different platforms in order to
identify performance regressions and improvements.

The are measured using the command

```
> channel_bench_* <nsend> <nrec> <buflen> <nobj>

nsend ... number of threads that push objects into the channel
nrec .... number of threads that pop objects from the channel
buflen .. length of channel buffer queue - `0` means unbuffered channel
nobj .... number of objects to pass thru the channel
```

## AMD Ryzen 7 3800X, Ubuntu-20.04 x86_64

10000000 Objects transfered, results in Objects/µs

| nsend | nrec | buflen | **V (gcc -O2)** | **V (tcc)** | **Go (glang)** | **Go (gccgo -O2)** |
| :---: | :---:| :---:  |      :---:      |    :---:    |     :---:      |      :---:         |
|   1   |   1  |    0   |      0.95       |    0.66     |      4.65      |       0.56         |
|   1   |   1  |   100  |      3.26       |    2.24     |     18.90      |       6.08         |
|   4   |   4  |    0   |      0.25       |    0.24     |      1.84      |       0.84         |
|   4   |   4  |   100  |      2.78       |    2.63     |      7.43      |       3.71         |

## Raspberry Pi 3B+, Void Linux musl 32 bit

10000000 Objects transfered, results in Objects/µs

| nsend | nrec | buflen | **V (gcc -O2)** | **Go (glang)** |
| :---: | :---:| :---:  |      :---:      |     :---:      |
|   1   |   1  |    0   |      0.37       |     0.21       |
|   1   |   1  |   100  |      1.03       |     0.74       |
|   4   |   4  |    0   |      0.04       |     0.38       |
|   4   |   4  |   100  |      2.78       |     2.63       |
|   2   |   2  |    0   |      0.05       |     0.38       |
|   2   |   2  |   100  |      1.26       |     0.75       |
