Skip to content

Conversation

@nemith
Copy link
Owner

@nemith nemith commented Jan 20, 2026

Read() was just looping over ReadByte(). Which was really fast but this is slighly faster and perhaps more correct by doing larger reads and bytes.IndexByte to search for the deliminator.

❯ go run golang.org/x/perf/cmd/benchstat@latest before.txt after.txt
goos: darwin
goarch: arm64
pkg: nemith.io/netconf/transport
cpu: Apple M4 Max
                               │  before.txt  │              after.txt               │
                               │    sec/op    │    sec/op     vs base                │
MarkedRead/Small_200B-16         17.02n ± ∞ ¹   15.96n ± ∞ ¹       ~ (p=1.000 n=1) ²
MarkedRead/Medium_128KB-16       16.67n ± ∞ ¹   16.12n ± ∞ ¹       ~ (p=1.000 n=1) ²
MarkedRead/Large_10MB-16         17.09n ± ∞ ¹   15.90n ± ∞ ¹       ~ (p=1.000 n=1) ²
MarkedReadByte/Small_200B-16     9.139n ± ∞ ¹   8.854n ± ∞ ¹       ~ (p=1.000 n=1) ²
MarkedReadByte/Medium_128KB-16   9.093n ± ∞ ¹   9.076n ± ∞ ¹       ~ (p=1.000 n=1) ²
geomean                          13.21n         12.69n        -3.99%
¹ need >= 6 samples for confidence interval at level 0.95
² need >= 4 samples to detect a difference at alpha level 0.05

                               │  before.txt   │               after.txt               │
                               │      B/s      │      B/s       vs base                │
MarkedRead/Small_200B-16         11.27Gi ± ∞ ¹   12.02Gi ± ∞ ¹       ~ (p=1.000 n=1) ²
MarkedRead/Medium_128KB-16       7.152Ti ± ∞ ¹   7.394Ti ± ∞ ¹       ~ (p=1.000 n=1) ²
MarkedRead/Large_10MB-16         558.2Ti ± ∞ ¹   600.0Ti ± ∞ ¹       ~ (p=1.000 n=1) ²
MarkedReadByte/Small_200B-16     20.99Gi ± ∞ ¹   21.67Gi ± ∞ ¹       ~ (p=1.000 n=1) ²
MarkedReadByte/Medium_128KB-16   13.11Ti ± ∞ ¹   13.14Ti ± ∞ ¹       ~ (p=1.000 n=1) ²
geomean                          1.639Ti         1.707Ti        +4.16%
¹ need >= 6 samples for confidence interval at level 0.95
² need >= 4 samples to detect a difference at alpha level 0.05

                               │ before.txt  │              after.txt              │
                               │    B/op     │    B/op      vs base                │
MarkedRead/Small_200B-16         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
MarkedRead/Medium_128KB-16       0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
MarkedRead/Large_10MB-16         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
MarkedReadByte/Small_200B-16     0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
MarkedReadByte/Medium_128KB-16   0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
geomean                                    ³                +0.00%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

                               │ before.txt  │              after.txt              │
                               │  allocs/op  │  allocs/op   vs base                │
MarkedRead/Small_200B-16         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
MarkedRead/Medium_128KB-16       0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
MarkedRead/Large_10MB-16         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
MarkedReadByte/Small_200B-16     0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
MarkedReadByte/Medium_128KB-16   0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
geomean                                    ³                +0.00%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants