龙空技术网

裤子都脱了却卡在99%,进度条卡住该怎么办

电手 341

前言:

眼前兄弟们对“复制文件过程中突然中断怎么回事”大致比较注意,大家都想要剖析一些“复制文件过程中突然中断怎么回事”的相关文章。那么小编在网络上搜集了一些对于“复制文件过程中突然中断怎么回事””的相关文章,希望我们能喜欢,同学们快快来学习一下吧!

我们一生都在等待,等一辆车、等一个人、等一次机会和无数卡在 99% 的进度条。

好像从 Windows 拥有第一个 GUI 开始,进度条就出现在我们的生活中。它们就像是患有拖延症的朋友,总是告诉你“快好了,再等一下,再 1 秒钟就好”,实际上可能永远也等不到。

我 TM 裤子都脱了你卡在 99% 是几个意思?

进度条的依据

进度条可以是百分比,也可以是一根逐渐充满的方块,它的显示依据是根据程序设定的某种标准。

比如当我们复制共 70GB 的 100 个文件,每个文件大小不一样,我们可以把每个文件作为 1%,完成一个文件进度条就涨 1%。或者将 70GB 作为整体,每复制 0.7GB 就让进度条涨 1%。

如果采用第一种标准,那么进度条的增长就不会平缓,比如前 10 个文件加起来只有10MB,进度条一瞬间就能冲到 10%,但是第 11 个文件有 10GB,就要卡很久才能从 10% 到 11%。

这样看来似乎第二种标准更加合理?但也有存在很多问题,复制单个大文件过程是连续的,用从 0 MB/s 加速到 100 MB/s 直到写入完成。但遇到多个小文件时过程就会中断,速度还没拉满就完成了一个文件,下一个文件又从 0 开始加速,永远达不到峰值速度。所以我们复制文件的时候会发现有时候波浪很平稳(大文件),有时候不断上下波动(多个小文件)。

计算机的不可抗力

除了文件本身存在不可估量外,更多的原因来自外界的不可抗力。

虽然我们都说计算机是绝对精准的,但实际上计算机内部一片「混乱」。当我们在写入文件的时候会占用系统资源,如果这时候系统资源被别的程序抢去,写入速度自然会降低,进度条就不准了。

再比如王者荣耀比赛载入的时,每位选手都有一个百分比进度条,实际上这个百分比也是预估值,因为游戏服务器的反馈时间往往是不确定的。其他网络服务的进度条也大多是同理。

不过下载大文件时进度条通常比较精准,因为总量一开始就确定,网络没有波动时只需 总量/下载速度 即可计算出剩余时间。

但对于 P2P 可能就不太实用了,都知道 P2P 是大家组成一个网络,所有人都分享自己的网络作为服务器,以达到「共同富裕」的目的。但就像聚会一样,参与人数越多,变数就越大。

如果有人退出共享网络,就会影响大家的下载速度。你这边还在下载,对面老哥已经提上裤子关了电脑,这也怨不得下载软件。

而卡在 99% 的原因主要有两点:

1、现在下载很多下载都采用多线程,相当于把一个文件拆成多个独立的任务,将这些任务分给每个线程,全部下载完成后再组装成一个完整的文件。但每个线程的速度却不一样,勤快的线程早早完成任务去睡觉了,而有一个很懒的线程一直磨洋工,大家都得等着它完成才能组成完整的文件,这就导致 99% 卡很久。

2、最后1%其实在「验证文件完整性」,以确保文件是正确可用的,这一步可能需要很长时间,甚至下载程序直接卡死也是常有的事。其实这时候关闭下载程序,将下载文件后缀改为原本的后缀依然能够打开。

进度条的意义

其实进度条本质上只有完成和未完成两种状态。

因为无法估量,很多程序员干脆自暴自弃,弄个假的进度条,为了逼真还把加载速度弄的不平稳,一跳一跳的,祈祷能在 99% 之前完成加载,实际上这就是个动画片。如果99% 都没加载完,就只能卡在那里。

这也侧面看出,进度条的主要目的可能并不是精准汇报工作进度。

更多时候进度条是为了缓解用户焦虑,让用户心里有底,感觉一切都在掌控之中。就像很少有人发现某些电梯的关门键只是个摆设,但疯狂按电梯关门键确实可以缓解焦虑,当电梯门合上的时候用户会以为是他们的功劳。

想象一下如果王者荣耀没有载入进度条,大家会怀疑是不是自己卡住了?还需要等多久?我能不能去上个厕所?这样就可能导致用户因为焦虑而退出游戏。

往往进度条是加载时界面中唯一活动的元素,如果进度条在动,说明程序还在工作,没有死机。避免了用户反复点击请求导致的程序崩溃。

没有设定总量的软件下载

所以就出现了转菊花的情况,连个百分比都没有,只是证明程序还在工作,至于多久完成?骗都懒得骗一下。

进度条确实像一个有点傻但很好心的朋友,陪我们一起度过漫长的载入时间……

标签: #复制文件过程中突然中断怎么回事