美文网首页小教程收藏
pgzip - 多线程压缩

pgzip - 多线程压缩

作者: Amy_Cui | 来源:发表于2019-07-03 18:26 被阅读13次

    功能:多线程压缩文件,比gzip快很多!!!

    我写教程,喜欢贴原链接,不单单呈现我自己的解析。

    帮助文档

    NAME:pigz, unpigz − compress or expand files

    读法:pig-zee

    SYNOPSIS
    pigz [ −cdfhikKlLmMnNqrRtz0..9,11 ] [ -b blocksize ] [ -p threads ] [ -S suffix ] [ name ... ]
    unpigz [ −cfhikKlLmMnNqrRtz ] [ -b blocksize ] [ -p threads ] [ -S suffix ] [ name ... ]
    

    功能

    ​ Pigz compresses using threads to make use of multiple processors and cores.

    参数描述

    1. -b:更改block size的大小

      1. The default input block size is 128K, but can be changed with the -b option.
    2. -p: 设置线程数

      1. The number of compress threads is set by default to the number of online processors, which can be changed using the -p option. Specifying -p 1 avoids the use of threads entirely.
    3. 解压缩不能并行化,至少没有专门准备的放气流那个目的。 Asaresult,pigz使用单个线程(主线程)进行解压缩,但是会创建三个其他线程用于读取,写入和检查计算,这可以加速解压缩在某些情况下。关闭这样类似的并行解压缩:可以通过指定并行解压缩来关闭并行解压缩进程(-dp 1或-tp 1)。

    4. pigz -d或unpigz可以将压缩文件恢复为原始文件

    参数详解

    -# --fast --best
    Regulate the speed of compression using the specified digit #, where −1 or −−fast indicates the fastest compression method (less compression) and −9 or −−best indicates the slowest compression method (best compression). -0 is no compression. −11 gives a few percent better compression at a severe cost in execution time, using the zopfli algorithm by Jyr ki Alakuijala. The default is −6.
    # -1或--fast表示最快的压缩方法(压缩程度较低),-9或--best表示最慢的压缩方法(最佳压缩)。 -0没有压缩。 -11使用Jyr ki Alakuijala的zopfli算法,在执行时间内以极高的成本提供了几个百分点的更好的压缩。默认值为-6。
    
    -b --blocksiz e mmm
    Set compression block size to mmmK (default 128KiB).
    # 将压缩块大小设置为mmmK(默认为128KiB)
    
    -c --stdout --to-stdout
    Write all processed output to stdout (won’t delete).
    # 将所有已处理的输出写入stdout(不会删除)。
    # 类似gzip的-c,把压缩的内容输出,这样可以重定向到另一个名字的文本,然后可以保留原文本
    
    -d --decompress --uncompress
    Decompress the compressed input.
    # 类似gzip的-d,解压缩(压缩内容传进来的输入)
    # 见下面示例,可以继续往后面|继续操作
    qmcui 13:20:04 ~
    $ cat tmp1.gz|gzip -d
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    -f --force
    Force overwr ite, compress .gz, links, and to terminal.
    
    -h --help
    Displayahelp screen and quit.
    
    -i --independent
    Compress blocks independently for damage recovery.
    # 独立压缩块以进行损坏恢复。
    
    -k --keep
    Do not delete original file after processing.
    # 处理后不要删除原始文件。
    
    -K --zip
    Compress to PKWare zip (.zip) single entry for mat.
    -l --list List the contents of the compressed input.
    # 列出压缩输入的内容
    
    -L --license
    Display the pigz license and quit.
    -m --no-time
    Do not store or restore the modification time. -Nm will store or restore the name, but not the modification time. Note that the order of the options is important.
    # 不要存储或恢复修改时间。 -Nm将存储或恢复名称,但不包括修改时间。请注意,选项的顺序很重要。
    
    -M --time
    Store or restore the modification time. -nM will store or restore the modification time, but not the name. Note that the order of the options is important.
    # 存储或恢复修改时间。 -nM将存储或恢复修改时间,但是不是名字。请注意,选项的顺序很重要。
    
    -n --no-name
    Do not store or restore the file name or the modification time. This is the default when decompressing. When the file name is not restored from the header, the name of the compressed file with the suffix stripped is the name of the decompressed file. When the modification time is not restored from the header, the modification time of the compressed file is used (not the current time).
    
    
    -N --name
    Store or restore both the file name and the modification time. This is the default when compressing.
    -p --processes n
    Allow up to n processes (default is the number of online processors)
    # 很重要,线程数
    
    -q --quiet --silent
    Print no messages, even on error.
    # 即使出错,也不打印任何消息。(参数意义相似)
    
    -r --recursive
    Process the contents of all subdirectories.
    # 处理所有子目录的内容。
    
    -R --rsyncable
    Input-deter mined block locations for rsync.
    -S --suffix .sss
    Use suffix .sss instead of .gz (for compression).
    # 使用后缀.sss而不是.gz(用于压缩)。
    
    -t --test
    Test the integrity of the compressed input.
    # 测试压缩输入的完整性。
    
    -v --verbose
    Provide more verbose output.
    -V --version
    Show the version of pigz. -vV also shows the zlib version.
    -z --zlib
    Compress to zlib (.zz) instead of gzip for mat.
    # 压缩为zlib(.zz)而不是gzip为mat。
    
    -- All arguments after "--" are treated as file names (for names that start with "-")
    These options are unique to the -11 compression level:
    -F --first
    Do iterations first, before block split (default is last).
    -I, --iterations n
    Number of iterations for optimization (default 15).
    -J, --maxsplits n
    Maximum number of split blocks (default 15).
    -O --oneblock
    Do not split into smaller blocks (default is block splitting)
    

    示例

    qmcui 13:50:11 ~
    $ time pigz -p 4 -c /public/reference/genome/hg38/hg38.fa >~/hg38.fa.pigz.p4.gz2>hg38.fa.pigz.p4.gz.log
    
    # 时间结果
    real2m2.551s
    user8m8.217s
    sys0m2.914s
    
    # 大约花费2min
    qmcui 13:52:13 ~
    $ time gzip -c /public/reference/genome/hg38/hg38.fa >~/hg38.fa.gz 2>hg38.fa.gz.log
    
    # 时间结果
    real4m37.013s
    user4m35.220s
    sys0m1.137s
    
    # 大约花费4min
    

    第一个压缩大约运行了不足3min

    第二个压缩需要很久,大约运行了不足5min

    评估

    ​ 如果你压缩的文件很小,比如小于3g,你可以使用gzip,如果文件很大,比如很大很大的vcf,100G+,最好使用pigz,可以省很多时间。

    ​ 其次,因为我没测试-9,即最大压缩率的情况,但是我觉得pigz应该速度还是完胜gzip。

    致谢

    哈哈,致谢我的生信小伙伴wll,告诉我这么快,因为我也没留意过cutadapter的子任务里还藏着这么一个好东西


    • 你还可以用xz压缩命令:学习网址

    https://www.baidu.com/link?url=z69U0JfVgs3dGwhGQn_C42M3JmQYdm5iXsgFtVYFYMwqOc6nysqlcswLAHcQNti2dgGGfbMFT-MtNA9YXxrkalP6IsjoQs_P0H-aCohGB57&wd=&eqid=e1e90ce50000ec47000000065cdf739b

    链接结论:
    
    1、pigz默认用法(默认并发线程是逻辑cpu个数)可比gzip快5.3倍,CPU消耗则是gzip的8倍,压缩比则相当;
    2、并发8线程对比4线程提升:41.2%,16线程对比8线程提升:27.9%,32线程对比16线程提升:3%;
    3、在对压缩效率要求较高、但对短时间内CPU消耗较高不受影响的场景,使用pigz非常合适。
    
    • 如果你已经开始改善你的流程了,加速或者寻找最好的代码来分析自己的数据,避免一味重复的是别人的代码。恭喜你,你具备了“生信研发”的基础技能,评估。
    • 如果你看不懂,自学是很慢,成功的人也很多,加油,否则问一下身边人选一个靠谱的培训班吧。
    • gzip压缩算法学习:https://www.cnblogs.com/kuang17/p/7193124.html
    • 请阅读原文链接,获取最新更新和更多内容~~~

    相关文章

      网友评论

        本文标题:pgzip - 多线程压缩

        本文链接:https://www.haomeiwen.com/subject/trgfzqtx.html