这篇“C语言字符串压缩之ZSTD算法怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言字符串压缩之ZSTD算法怎么使用”文章吧。字符串压缩,我们通常的需求有几个,一是高压缩率,二是压缩速率高,三是解压速率高。不过高压缩率与高压缩速率是鱼和熊掌的关系,不可皆得,优秀的算法一般也是采用压缩率与性能折中的方案。从压缩率、压缩速率、解压速率考虑,zstd与lz4有较好的压缩与解压性能,最终选取zstd与lz4进行调研。zstd是facebook开源的提供高压缩比的快速压缩算法,很想了解一下它在压缩与解压方面的实际表现。ZSTD_compress属于ZSTD的Simple API范畴,只有压缩级别可以设置。ZSTD_compress函数原型如下:size_tZSTD_compress(void* dst, size_t dstCapacity, const void* src, size_t srcSize, int compressionLevel)ZSTD_decompress函数原型如下:size_t ZSTD_decompress( void* dst, size_t dstCapacity, const void* src, size_t compressedSize); 我们先来看看zstd的压缩与解压缩示例。执行结果:从结果可以发现,压缩之前的peppa pig文本长度为1827,压缩后的文本长度为759,压缩率为2.4,解压后的长度与压缩前相等。另外,上文提到可以调整ZSTD_compress函数的压缩级别,zstd的默认级别为ZSTD_CLEVEL_DEFAULT = 3,最小值为0,最大值为ZSTD_MAX_CLEVEL = 22。另外也提供一些策略设置,例如ZSTD_fast, ZSTD_greedy, ZSTD_lazy, ZSTD_lazy2, ZSTD_btlazy2。压缩级别越高,压缩率越高,但是压缩速率越低。上面探索了zstd的基础压缩与解压方法,接下来再摸索一下zstd的压缩与解压缩性能。测试方法是,使用ZSTD_compress连续压缩同一段文本并持续10秒,最后得到每一秒的平均压缩速率。测试压缩性能的代码示例如下:执行结果:结果显示ZSTD的压缩性能大概在每秒6-7万次左右,这个结果其实并不是太理想。需要说明的是压缩性能与待压缩文本的长度、字符内容也是有关系的。我们再来探索一下ZSTD的解压缩性能。与上面的测试方法类似,先对本文进行压缩,然后连续解压同一段被压缩过的数据并持续10秒,最后得到每一秒的平均解压速率。测试解压性能的代码示例如下:执行结果:结果显示ZSTD的解压缩性能大概在每秒12万次左右,解压性能比压缩性能高。zstd提供了一个名为PZSTD的压缩和解压工具。PZSTD(parallel zstd),并行压缩的zstd,是一个使用多线程对待压缩文本进行切片分段,且进行并行压缩的命令行工具。其实高版本(v1.4.0及以上)的zstd也提供了指定多线程对文本进行并行压缩的相关API接口,也就是本小节要介绍的zstd高级API用法。下面我们再来探索一下zstd的多线程压缩使用方法。多线程并行压缩的两个关键API,一个是参数设置API,另一个是压缩API。参数设置API的原型是:size_t ZSTD_CCtx_setParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param, int value)压缩API的原型是:size_t ZSTD_compress2(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize)下面给出zstd并行压缩的示例demo,通过ZSTD_CCtx_setParameter设置线程数为3,即指定宏ZSTD_c_nbWorkers为3,通过ZSTD_compress2压缩相关文本。另外,为了展示zstd确实使用了多线程,需要先读取一个非常大的文件,作为zstd的压缩文本源,尽量使zstd运行较长时间。运行上述demo,可见zstd确实启动了3个线程对文本进行了并行压缩。且设置的线程数越多,压缩时间越短,这里就不详细展示了,读者可以自行实验。需要说明的是,zstd当前免费云主机域名默认编译单线程的库文件,要实现多线程的API调用,需要在make的时候指定编译参数ZSTD_MULTITHREAD。另外,zstd还支持线程池的方式,线程池的函数原型:POOL_ctx* ZSTD_createThreadPool(size_t numThreads)线程池可以避免在多次、连续压缩场景时频繁的去创建线程、撤销线程产生的非必要开销,使得算力主要开销在文本压缩方面。以上就是关于“C语言字符串压缩之ZSTD算法怎么使用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注百云主机行业资讯频道。
相关推荐: vue的Vue.http.interceptors.push拦截器怎么使用
这篇文章主要介绍“vue的Vue.http.interceptors.push拦截器怎么使用”,在日常操作中,相信很多人在vue的Vue.http.interceptors.push拦截器怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。