Changes for version 0.033 - 2026-10-18

  • Fix quadratic reads in get_line_burst_or_data(): the reader no longer pulls the whole pipe into memory or copies the rest of the buffer per burst (100 MB mixed-mode stream: ~0.3 MB/s -> ~530 MB/s).
  • Fix quadratic reassembly of multi-part messages (~6x faster on 1.6 MB messages).
  • Take message parts that are already fully buffered in one step (about 1.3x-1.6x faster reads).
  • Bursts that span several reads are no longer returned partly as line data.
  • The message key is only special at the start of a burst, not inside one.
  • Multi-byte burst_prefix / burst_postfix now work across reads and as the message terminator.
  • A non-blocking reader waiting on the rest of a burst returns empty instead of spinning.
  • A blocking read_message() with a small read_size no longer returns undef partway through the stream.
  • New compress_large_only option: compress only messages too big for one atomic part, and only when that shrinks them; it turns on zstd by itself.
  • New compression_threshold option to change that cut-off (default: one atomic part, 4080 bytes on Linux).
  • compress_large_only uses a new flag in the message header; mixing versions on the two ends is not supported (an older reader stalls or hangs).
  • Bursts are not compressed under compress_large_only, and keep_compressed only reports messages that were sent compressed.
  • Turning compress_large_only off also turns off the compression it switched on.
  • A reader decompresses flagged messages even without compression configured, when Compress::Zstd is installed.
  • Rewrite the Performance documentation: its large compression speedups came mostly from the quadratic reader.
  • Fix unresolved internal POD links.

Documentation

Modules

Send atomic messages from multiple writers across a POSIX pipe.
Send atomic messages from multiple writers across a POSIX pipe.