有问有答:为什么Steam在下载时会占用非常多的系统资源?

很多读者朋友都是Steam的忠实用户,现在宽带的带宽普遍增多了,像200Mbps、500Mbps这样入户的也不少见了,可能很多网速较快的朋友在Steam上下载游戏时会发现自己电脑的CPU占用率很高,难不成下载速度快了CPU会跟不上吗?这是有可能发生的,原因呢,出在Steam的整套下载机制上。

Steam使用了一套较为复杂的文件下载机制。首先,开发者可以给自己的游戏建立多个仓库,每个仓库中可以存放不同的文件。Steam会根据仓库中的文件内容,形成一份清单,同时将该仓库中的所有文件进行分块,每个块大小约为1MB,为了不让没有购买过该游戏的用户轻松获取到游戏文件,Steam内容系统将每个块都使用LZMA算法进行了压缩,并且使用一个256-bit长度的密钥对文件块进行了AES加密。每个仓库都有一个独一无二的密钥,并且在仓库的清单中记载有原始文件名、文件大小、文件校验值、文件类型和文件区块的元数据,同时还会记载每个区块的ID、校验码、文件位置偏移值和压缩前后的大小。通过这样的设计,Steam能够有效保障整个下载过程是高效的,并且在下载时不会有差错。同时,对于所有Steam用户来说,每个区块文件都是一样的,这也允许CDN存储静态的内容,而不是动态加密的。

大概就是这样子,把整个仓库的文件给压缩并加密了

在下载一个已经发售的游戏时,Steam是可以第一时间拿到用于解密文件的密钥的,为了节约时间,Steam使用了边下载边解密的办法,而LZMA解压缩(就是7-Zip用的算法之一)和AES解密都是较为吃CPU资源的,这也就是Steam下载速度越快,CPU占用率越高的原因了——因为你同时间要解密的数据量更大了。

在公司500Mbps的网络环境下,用Steam下载游戏大概会吃掉我这块i7-4770K约50%的占用率,还是很高的

而在下载尚未发售游戏的数据时,也就是在预载游戏时,由于拿不到用来解密数据的Key,Steam会把下载到的数据存到*.csd文件中,在游戏正式发售之后,就会使用拿到的密钥进行解密和解压缩。如果你的存储设备速度慢,而网速较快的话,那确实不如不做预载、直接在正式发售后进行下载。

本文主要参考了SteamDB对Steam下载机制的解读文章,如果各位读者对Steam下载还有别的疑惑的话,欢迎在评论区中提出。

(0)

相关推荐