基于流式的md5计算-多线程下载工具Lwget介绍

简介:

在数据传输的时候,我们希望实现以下目标:
1. 使用多线程传输,加速下载速度
2. 数据在传输过程中,进行流式md5计算,避免在传输完毕之后校验大文件
3. 支持断点续传
4. 支持http协议和ftp协议
5. 代码尽可能的简单,利于维护

实现目标
1. 使用多线程传输,加速下载速度
2. 数据在传输过程中,进行流式md5计算,避免在传输完毕之后校验大文件
3. 支持断点续传
4. 支持http协议和ftp协议
5. 代码尽可能的简单,利于维护

系统依赖
1. perl,版本>=5.8.5
2. linux or windows

目前实现的功能
支持FTP和HTTP下载
支持断点续传(HTTP and FTP)
多线程下载加速(线程数目可以任意指定)
支持限速
 下载的同时进行流式的md5计算,下载完毕即可生成整个文件的md5(可以使用参数指定是否需要计算md5)
命令行参数选项类似于wget
跨平台(windows && linux)
使用示例
./lwget -v 输出帮助信息
 



命令行参数解释
 -d|--debug : 输出debug信息,比如FTP或者HTTP的连接信息
 -c|--continue: 是否需要续传
 -b|--block-size : 指定数据分块大小,默认为3M,测试得出性价比较高
 -s|--limit-rate: 最大速度,默认为25M/s
 -o|--output-file : 下载到本地的文件命名,不指定默认采用源文件名
 -n|--thread-num:下载线程数目,默认为4,建议保持在16以下
 -m|--md5 : 指定是否计算文件md5,-m表示计算md5,且md5文件的命名为输出文件.md5;-m foo.md5 则指定md5文件名称为foo.md5
 -q|--quiet : 屏幕不打印信息,类似于wget -q参数
 -h|--help : 输出帮助信息
 -v|-- version : 打印版本信息

使用范例
性能测试
情景一



情景二

说明:
1. 采用HTTP协议下载对上下游的消耗更少
2. FTP协议下载时,多线程(10个线程以上),大文件(10G左右)会对上游造成较大的压力(cpu_idle降到50%),对下游无特别影响
3. 如果不计算md5,对下游的压力会变的更小
4. 在高速网络中,性能不如wget,wget可以下载到100m/s,而lwget只能达到80m/s的速度,且系统的负载要比使用wget高
5. 限速在20M/s以下的时候,和wget的性能比较接近.
优缺点
优点
 在低速网络中,下载速度很快(很容易的维持在20m/s)
 边下载边计算md5,避免了在文件下载完之后计算md5耗时耗资源(11G的文件做md5校验耗时在5分钟左右,使用lwget可以免去这个时间和消耗)
 lwget代码简洁(只有19K),易于维护
 很方便的支持续传(FTP 和 HTTP)
 可以在windows下直接使用
缺点
 在高速下载的时候,性能不如wget

 不支持整个目录下载

 

 






本文转自百度技术51CTO博客,原文链接:http://blog.51cto.com/baidutech/748333,如需转载请自行联系原作者
相关文章
|
2月前
|
缓存 监控 Java
线程池的魔法:Java 开发者必备的并发工具
线程池的魔法:Java 开发者必备的并发工具
47 0
|
3月前
|
存储 Java 数据安全/隐私保护
探索Java中神奇的ThreadLocal:为什么它是多线程编程的重要工具?
探索Java中神奇的ThreadLocal:为什么它是多线程编程的重要工具?
|
1月前
|
数据可视化 关系型数据库 编译器
【C/C++ 单线程性能分析工具 Gprof】 GNU的C/C++ 性能分析工具 Gprof 使用全面指南
【C/C++ 单线程性能分析工具 Gprof】 GNU的C/C++ 性能分析工具 Gprof 使用全面指南
110 2
|
8月前
多线程的线程工具的初步使用和原理详解
多线程的线程工具的初步使用和原理详解
46 0
|
4月前
学习多线程之Semaphore工具解释
学习多线程之Semaphore工具解释
27 0
|
7月前
|
Java
Java并发计算判断线程池中的线程是否全部执行完毕
Java并发计算判断线程池中的线程是否全部执行完毕
69 0
|
8月前
|
Java
【并发技术16】线程同步工具Exchanger的使用
【并发技术16】线程同步工具Exchanger的使用
|
8月前
|
数据库
【并发技术15】线程同步工具CyclicBarrier的使用
【并发技术15】线程同步工具CyclicBarrier的使用
|
8月前
|
Java
【并发技术14】线程同步工具Semaphore的使用
【并发技术14】线程同步工具Semaphore的使用
|
存储 关系型数据库 MySQL
linux Command sysbench 线程压力测试工具(2)
linux Command sysbench 线程压力测试工具(2)