Можно ли распараллелить функции compress () / compress2 () из zlib, не нарушая последовательный inflate () - PullRequest
1 голос
/ 16 января 2020

Я пытаюсь распараллелить вызовы сжатия из zlib (функции compress / compress2), где данные, подлежащие сжатию и выходной буфер, доступны во время вызова. Для справки я следую коду pigz (https://zlib.net/pigz/), который является утилитой и работает с файлами, поэтому мне пришлось бы написать что-то подобное, но я мог бы перехватывать вызовы compress / compress2. Кроме того, я предполагаю, что вызовы функций compress / compress2 будут иметь разумные размеры данных, поэтому распараллеливание имеет смысл. также предполагается прозрачная последовательная декомпрессия приложением с использованием функций inflateInit_ / inflate / inflateEnd. также учитывая компромисс в отношении степени сжатия.

  1. Я не совсем понимаю, как поток записи в pigz обрабатывает выходные данные из нескольких потоков сжатия, которые не находятся на границе байтов?
  2. , если есть маркер syn c с определенными затратами пространства, может ли это когда-либо нарушать размер выходного буфера, заданного для вызова функции compress / compress2?
  3. будет ли этот дефлированный поток, генерируемый параллельно, прозрачно обрабатываться последовательно с помощью вызова inflate.
...