Zero-copy уменьшает лишние копирования между ядром и приложением. Для файла и блокирующего TCP-сокета Python предоставляет socket.sendfile(), использующий системную поддержку, когда она доступна.
Что такое zero-copy операции, например системный вызов sendfile? Как передать файл из дискового хранилища в сетевой сокет, минуя копирование данных в пользовательское пространство приложения на Python?
Zero-copy уменьшает лишние копирования между ядром и приложением. Для файла и блокирующего TCP-сокета Python предоставляет socket.sendfile(), использующий системную поддержку, когда она доступна.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Zero-copy уменьшает лишние копирования между ядром и приложением. Для файла и блокирующего TCP-сокета Python предоставляет socket.sendfile(), использующий системную поддержку, когда она доступна.
Для уже подключённого обычного сокета:
with open("report.bin", "rb") as source:
sent = sock.sendfile(source)
Это позволяет не писать цикл read() и send() с буфером в Python. Метод может использовать fallback, поэтому «zero-copy» не является безусловной гарантией для любой платформы. Учтите ошибки соединения, ограничения неблокирующих сокетов и отдельный путь для TLS. Термин не означает полного отсутствия перемещений данных внутри памяти и оборудования.
Источник: docs.python.org.