- 积分
- 10
- 下载分
- 分
- 威望
- 点
- 原创币
- 点
- 下载
- 次
- 上传
- 次
- 注册时间
- 2017-10-31
- 精华
|
6#
发表于 2018-5-14 13:48:42
|
只看该作者
来自: LAN 来自 LAN
现代硬盘都可以支持这个速度。机械磁盘也一样。就算是usb外接的硬盘,最起码的支持速度都比这个高个100倍的样子了。
可以试验一下,先别去运行其他程序,开个单线程小程序loop吸收读取某个网络资源,写到硬盘文件。比如在一个非常老的浏览器里面去下载一个比较打的资源。大多数时间就在waiting状态,也不会卡。从程序角度来说,绝对就卡在那个等待输入方面了(所以把自己的时间让给了其他程序,比如系统)。
为什么会卡呢?毕竟题主加了"迅雷"这标签,那就得从这个角度出发。。。
下载的东西多了,两边同时开了许多个filehandle(网络具体端口connection那边也是虚拟filehandle)。bittorrent的话,下载一个种子,本来就不是一个filehandle/connection的事。没那么简单。同时得跟几百个对方散户保持链接,在本地也要同时编辑同一个文件若干不同的位置(在背后很可能也是几百个filehandle)。这些输出输入切换的复杂程度,也没想象中那么简单。如果程序有什么bug,也挺容易占用资源。理论上,每次切换filehandle,每次切换线程(线程也是filehandle),也都有个最小成本(比如0.05毫秒)。这种成本,跟处理器速度不太有关,跟硬盘速度也无关,一般也感觉不到的。但是你要同时下载数百个bittorrent的话,同时管理数万个filehandle,如果没有任何buffer,这就会成了该程序最大的负担拖累了。不会在cpu占比直接显示,因为cpu本来就没在做多少事情,而在等主板执行这些切换。不过也能感觉得到那种卡感。另外,硬盘只能同时读写一个地方。磁盘切盘切位的时间也确实不止50微妙,可能必一毫秒还长。这都是一种停止转换,也不能同时并行。为什么我们把一个单独文件转到另一个磁盘上可以达到很高的速度,同时上传多个文件就严重降低了总和速度呢?还不如一个一个来?同时进行却占用了很多没必要的来回传命或转位时间。也许有更好的算法可以处理这类事,但大多数软件架构是做不到那么精致的。(也许可以改一下迅雷软件的设置,把全部下载放到内存,偶尔才更新目标文件,我不太清楚了)也有一种可能,这软件故意在消耗你的处理器时间,做一些其他的事。不排除邪恶用你的计算机去算其他东西之类的。也有可能利于你的软件体验(比如在'checking'/'preparing'),只是用了比较粗暴直接的算法,占了太大的资源了。也有一种可能是电脑上所安装的其他软件(比如那些一直开着的'杀毒'软件之类的,不断地在观察硬盘状态,或者一直在干自己的坏事,让电脑变得卡了,或者正好跟这软件服务冲突成了一种奇怪循环。反正总可以查看哪个程序占了cpu/network/disk,另外处置吧)。如果是迅雷占领了,保证是人家程序设计或设置上的问题。。。硬盘比较满的话,或者曾经很满,有一些例外情况会导致写入更加缓慢。因为文件不能全部写到同一个实体地址。还有内存满了,用硬盘当内存之类的情况,也会变卡了。
Really forgot what my original point was. |
|