当使用libra克隆mega仓库时,仓库元数据传输结束后,libra会长时间卡顿在restore阶段,需要2-3min时间才能restore完成。
检查发现restore步骤有两处影响执行效率的地方:
read_pack_obj做为一个递归执行的函数,每次递归都要从pack文件中读取对应offset的内容,磁盘IO过多,导致解析效率降低。
read_pack_obj中使用了Pack中的函数,当前每次使用这些函数时,需要先new 一个Pack对象,而new这个Pack对象的时候会初始化一个线程池,生成很多线程。这就导致递归解析pack文件时创建了非常多的线程。然而这些函数本身并没有使用Pack中的任何成员,应该定义成关联函数而非成员函数,调用这些函数不需要new Pack对象,也就不会创建非常多线程。
当使用libra克隆mega仓库时,仓库元数据传输结束后,libra会长时间卡顿在restore阶段,需要2-3min时间才能restore完成。
检查发现restore步骤有两处影响执行效率的地方:
read_pack_obj做为一个递归执行的函数,每次递归都要从pack文件中读取对应offset的内容,磁盘IO过多,导致解析效率降低。read_pack_obj中使用了Pack中的函数,当前每次使用这些函数时,需要先new 一个Pack对象,而new这个Pack对象的时候会初始化一个线程池,生成很多线程。这就导致递归解析pack文件时创建了非常多的线程。然而这些函数本身并没有使用Pack中的任何成员,应该定义成关联函数而非成员函数,调用这些函数不需要new Pack对象,也就不会创建非常多线程。