Zlib распаковка против производительности распаковки - PullRequest
0 голосов
/ 10 мая 2019

Есть ли какой-либо недостаток производительности при использовании функции zlib depressobj вместо декомпрессии?

Я спрашиваю, потому что приложение на Python, с которым я работаю, распаковывает файлы с помощью zlib.Последние несколько месяцев все работало нормально, однако один тип файлов превышал ограничение памяти сервера, что приводило к сбою функции распаковки.На основе документа я могу переключиться на функцию распаковки, которая работает с чанками и может обрабатывать большие файлы.Дело в том, что у меня больше применений функции распаковки, и я подумываю о том, чтобы поменять их все на декомпрессию.Это нормально или это может сделать код медленнее?

1 Ответ

2 голосов
/ 10 мая 2019

Прежде всего, преждевременная оптимизация - корень всего зла. Оптимизируйте что-то только тогда, когда это слишком мало , на практике , и вы определили источник ресурсов (например, с профилированием), и эффект достаточно велик, чтобы стоить усилий и дополнительной сложности (= дополнительная нагрузка на обслуживание в будущем).


Обе реализации zlib.decompress и zlib.decompressobj.decompress находятся в zlibmodule.c, как zlib_decompress_impl и zlib_Decompress_decompress_impl, соответственно.

Они не разделяют код, но их код почти такой же (как и ожидалось) и делегирует те же самые функции библиотеки zlib C.

Так что нет никакой разницы, какую из них использовать в необработанном виде для декомпрессии.

Скорее всего, decompressobj будет иметь крошечные издержки с дополнительной логикой и повторными вызовами Python - но если данные большие, время распаковки превзойдет их.

  • То есть, стоит ли замена decompress на decompressobj (или будет иметь какой-либо эффект), зависит от того, является ли узкое место в каждом конкретном случае памятью, процессором или вводом-выводом (положительный эффект) если память, отрицательный эффект, если процессор, нет эффекта, если ввод / вывод). (Таким образом, перейдите к первому абзацу для руководства.)
...