当前位置:首页>微思动态>详情
全国热线电话 400-881-4699

在线留言

【必看】为什么Windows用久了会变慢,Linux却不会?

发布作者:微思网络   发布时间:2018-01-19   浏览量:0

首先,问题不成立。


Windows用久了也可能不变慢,Linux用久了也可能会变慢。

其次,扫了一眼前面的回答,基本上没有回答清楚Windows为什么会变慢的原因,我猜测说Linux不慢的人是因为用Linux多,或者没有去研究Windows为什么会变慢(或者不屑于研究?)。

先反驳几个观点:

Windows有磁盘碎片,Linux就没有吗?有人说Linux用direct和indirect块索引数据,碎片对ext影响不大。NTFS天生也是支持索引的,NTFS碎片影响也不大的。

有人说Windows垃圾文件变多,NTFS也用B+树,请问文件多的话,能慢多少?是用户能感觉的到的吗?

注册表IO也是IO,Linux读配置文件也是IO,二者有本质区别吗?注册表IO需要排队?磁盘IO就不需要排队了吗?性能差别多大?能产生用户体验上的差别吗?

没事就把原因归结到文件系统碎片,一个完全碎片化的文件系统,能产生用户体验上的巨大的速度差异吗?不服气的拿出数据来。也太小看文件系统cache的作用了。


为什么有时候Windows会变慢


打开注册表编辑器,访问以下键值:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services


看到下面的子键了吗?每项都是一个开机项(加载一个sys文件),这才是真正占用开机时间和运行时CPU时间的东西,而且由于软件设计的不规范,多数软件卸载的时候都不删这里的东西的。把这个归结于微软设计不对是不恰当的,微软允许软件删除这里的内容,但很多软件不去做。

这里跟启动项不同,并且修改具有很大的风险,所以普通用户会觉得:我启动项里没有东西,为什么还这么慢,因为有很多以系统服务启动的东西是不占进程ID、不占启动项的,手头有装360的,开机时间里,“系统关键服务”这个大头,就是这堆东西,截图给大家看看(我特意装的360!):



一个新装的Windows,如果不装任何软件,services里是不会新增任何东西的,那么速度也不会有明显的变慢(我老家有台电脑,装的WIN2K,常年不联网,好几年了开机速度都没有变化)。

而我现在的电脑,services下面有超过100项内容(刚特意数了一下,大概500多),这么多东西全加载,不慢就奇怪了。(这里补充一下,这么多并非都开机加载,有些是延迟加载的,即使这样,开机加载的东西的大头主要都在这里)


为什么多数Linux不会变慢


因为二者的内核有本质差别,Windows使用近似微内核的结构,外围驱动有相当一部分是通过注册services项目的方式加载的,所以,新增硬件,新装软件如果有sys文件需要加载,就要增加services项,导致开机时Windows内核代码加载时间会慢慢变长。

Linux是宏内核结构,大部分驱动都包含在内核里,我相信Linux用户没事不会自己重编内核玩,那么Linux内核加载时间是固定的。那么Linux开机时间就不会有特别明显的变化。要是Linux用户隔三差五的往内核里添点东西,Linux不会变慢?那就出鬼了。

所以别去比较二者为什么变慢了,内核设计都不一样,如果Linux允许rpm包大量的把代码放到内核态并且开机加载,Linux一样也会慢的要死。

最后,给个数据,虚拟机里(配置相同),一个新装的debian 6,开机时间一共是40秒(从boot菜单到桌面加载完,除去了输入密码的时间,秒表计时),一个新装的WINXP,开机时间是35秒(无密码)。



有人说,我就装个游戏,电脑怎么变慢了?你们知道吗,装个游戏没准就顺便给你装个.net frameworks x.x,顺便装directX,顺手给你的服务项里塞一堆的sys文件,游戏玩多了不变慢就见鬼了。这年头,装个QQ都有可能会给你安装sys文件(QQ2005-2007年期间的版本),电脑变慢这种事情,太正常不过了。


还看到有人说Windows内存管理机制的问题,那么应用态(进程)任务退出以后,整个虚拟地址都不存在了,内存难道还收不回去?除非是内核态的内存。但是,如果只用官方的驱动,会有内存泄露的问题?第三方驱动做的不好,怪到微软头上。Linux内核代码申请了内存用完了不释放直接退出,效果也是一样的。


有很多人对services里的东西很关心,我来解释一下,首先这里不是所有的东西都开机启动的,里面有属性设置是否开机启动,其中包括的内容有:各种NT式驱动(大部分非即插即用式设备驱动),文件系统驱动(FAT驱动的名字是fastfat),各种应用态的服务(比如DHCP),各种软件自己注册的驱动(比如腾讯的安全控件驱动QQCertificateService),各种系统库(比如.net frameworks一类的),等等。

清理这里的任何东西都是有很大风险的,但对Windows系统比较熟悉的,还是有能力清理的。我过去也不知道这里有这么多的东西,直到有一天我自己开始写驱动,然后把驱动加载到这里。


返回顶部