Невозможно сказать, что ограничивает использование вашего ядра без профилирования, а также знать, сколько данных вы сжимаете в своем тесте.
Однако я могу сказать, что для получения хорошей эффективности, которая включает в себякак полное использование ядра, так и близкое к коэффициенту n ускорение для n потоков в одном потоке, в pigz Я должен создать пулы потоков, которые всегда естьлибо работает, либо ждет больше работы.Это огромное влияние на создание и уничтожение потоков для каждого куска данных, которые будут обработаны.У меня также есть пулы предварительно выделенных блоков памяти по той же причине.
Может помочь исходный код по ссылке, в C.