Phase 15 of 30 · Topic 15.2

Zero-Allocation Socket & Network Processing with `System.IO.Pipelines`

1Concept

`System.IO.Pipelines` (the core of Kestrel web server) separates buffer management from parsing. It manages pooled `Memory<byte>` blocks, allowing continuous stream parsing without byte array copying.

2Architecture Diagram

Network Socket ──> [ PipeWriter ] ──> Pooled Memory Blocks (ArrayPool)
                                                    │
                                                    ▼
                     [ PipeReader ] ──> ReadOnlySequence<byte> ──> Fast Span Parsing

3Code Example

C# 13 & .NET 9
using System;
using System.IO.Pipelines;
using System.Text;
using System.Threading.Tasks;

public class PipelinesDemo
{
    public static async Task Main()
    {
        var pipe = new Pipe();

        // 1. Writer pushes data into pipe buffer
        byte[] message = Encoding.UTF8.GetBytes("GET /api/v1/health HTTP/1.1\r\n\r\n");
        await pipe.Writer.WriteAsync(message);

        // 2. Reader consumes zero-copy memory sequence
        ReadResult result = await pipe.Reader.ReadAsync();
        ReadOnlySequence<byte> buffer = result.Buffer;

        Console.WriteLine($"Pipeline Read Buffer Length: {buffer.Length} bytes");
        pipe.Reader.AdvanceTo(buffer.End); // Marks buffer as consumed
    }
}

4Expected Output

Pipeline Read Buffer Length: 32 bytes

5Key Takeaways

  • `System.IO.Pipelines` is the foundation of high-performance networking in .NET.
  • Eliminates buffer allocation and garbage collection overhead in web servers.
  • Handles fragmented multi-segment buffers seamlessly via `ReadOnlySequence<T>`.