Проверяет понимание сетевых оптимизаций, io.Reader/io.Writer, mmap, slice semantics и передачи буферов по ссылке.
Zero-copy — это механизм передачи данных между компонентами без копирования. В Go это возможно через slices, io.Reader/io.Writer, sendfile(), mmap. Используется для больших файлов и сетевого IO.
Zero-copy снижает нагрузку на CPU, улучшает пропускную способность и уменьшает задержки.
Slice — это обёртка над массивом.
Передача slice по значению не копирует данные:
func process(b []byte) { /* b shares underlying array */ }Большинство операций принимают большие буферы и пишут прямо в них.
Go вызывает системный вызов sendfile, который позволяет отправлять файлы в сокет без копий в user space.
io.Copy(outConn, inFile) // под капотом sendfileМожно memory-map’ить файлы и читать их в виде массива байт, не загружая в память полностью.
Повторное использование буферов через sync.Pool.
Если вы меняете размер slice или делаете append — Go может делать realloc.
Zero-copy — мощный способ оптимизации больших данных. Важно проектировать API так, чтобы не копировать буферы понапрасну.