Skip to content

Best Practice of Downloader  #309

Description

@halx99

Best Practice of Downloader (下载器最佳实践)

  • 优化V1
    • 多线程下载
    • 边下载边写文件,边下载边计算摘要md5_append, 并将md5_state状态文件实时写入磁盘
    • 下载完成摘要也就计算完成md5_finish
  • 优化V2
    • 下载过程中的数据文件状态文件都可以用内存映射文件
    • 内存映射文件可以提前分配好磁盘空间,写入过程中不再需要磁盘驱动器不断地扩充文件大小,相当于我们使用std::vector过程中,如果已经知道数据大小,可提前reserve内存,避免GC
    • 状态文件包含字段:
      • 已下载字节数 4字节
      • hash摘要状态,例如md5_state 88字节
    • 多路io复用同时下载多个文件,提高CPU利用率,无需开过多线程,对于移动端最大2~4线程就够用,基本可以同时下载10个以上小文件,同时对于小文件也可以更加充分地利用传输带宽

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions