Linux和Windows内核


9

我在Linux上工作,在Windows 7上工作。

我对NetBeans,Eclipse,pgAdmin和其他程序的打开速度感到惊讶,实际上,在Linux上比在Windows上快很多。

Linux和Windows内核之间导致时间负载差异的主要区别是什么?

两台机器的硬件配置完全相同。


1
有趣的是,我的经验恰好相反-在我所有的PC上,Windows中的程序加载速度都比Linux上快得多(尤其是在Windows 7下,后者会根据过去的使用情况猜测要打开哪些程序,并将它们预加载到内存中)。也许他的Windows机器上装满了膨胀软件?公司是否仅对Windows防病毒?您是否尝试过在同一台计算机上运行Linux (失败的硬盘会严重影响加载时间)
BlueRaja-Danny Pflughoeft 2012年

@ BlueRaja-DannyPflughoeft感谢您的评论。正如我在问题上告诉我的那样,两台计算机都具有相同的硬件配置,都配备了Windows 7,但我是Linux用户,不,他的Windows不会肿
Gerep 2012年

1
@ BlueRaja-DannyPflughoeft我发现有趣的事情是,在对Windows设置了防病毒功能之后,它变得越来越滞后。因此,实际上,不需要膨胀软件,只需安装防病毒软件。GNU / Linux不需要一个(至少还不需要),而这个小东西也提供了更多的性能。
Hi-Angel 2014年

Answers:


8

这只是我的猜测,但是我认为当您在一家公司工作时,一旦一切都被编译(转换为二进制数据,可以由计算机执行),再也没有人能看到源代码了,您往往会变得懒惰,因为它并不重要,只要它的作品
Linux是开源的,因此每个愿意的人都可以看到源代码。如果您很懒惰,并且编写了一段很糟糕的代码,这会真正减慢系统速度或诸如此类,那么您的声誉就会如您所见。开发人员和用户都一样。我认为这就是开放源代码开发人员倾向于不那么懒惰的原因之一。

还有一个事实是,Windows内核的核心从来没有为了成为今天的样子而编写(Linux也不是,但是他们尽了最大努力来优化旧的东西),并且开发人员一直在不断地增加和增加。最重要的是,直到代码变得如此神秘,以至于没人能再用它做点什么了。凌乱代码的两个属性是,通常有很多冗余,而且您再也看不到两段代码之间的链接了,这使得您甚至无法尝试对其进行优化。只是一个例子(不是一个神秘的例子);

for (int i = 0; i < 20; i++)
{
    if (x == y)
    {
        if (z <= u)
        {
            goto banana;
        }
    }
}

上面的示例可以更有效地完成;

for (int i = 0; (i < 20) && (x == y) && (z <= u); i++)
{
    banana ();
}

1
我相信在程序员领域,当前的共识是在编译器中可以很好地优化惰性和/或草率的编码。但是,编译器无法帮助您and肿和遗留,这可能与您的意图有关。
克里斯K

4
这两个代码示例几乎都可以编译为同一件事(减去函数调用与goto)...
BlueRaja-Danny Pflughoeft 2012年

我知道@ BlueRaja-DannyPflughoeft,但是我需要一个简单的示例来说明它。
RobinJ 2012年

5

另一个尚未提及的大问题是Linux具有更好的文件系统。NTFS处理小文件的性能不是很好-ext3更好,而ext4则好得多。关于为什么在另一个问题上有一些有趣的推测。

当您打开一个程序时,大量的启动时间正在从磁盘加载一堆小文件,因此拥有一个能够快速执行此操作的文件系统非常重要。


4

这只是我的观点,但我认为GNU / Linux系统比Windows更快的原因有很多,并且并非全部与内核有关:

  • 显然有RobinJ解释过的原因,很明显,如果软件是开源的,则代码往往会更高效地编写
  • Linux利用了非常优化的组件,例如,它使用了非常优化的调度程序,该调度程序倾向于最大化CPU利用率。
  • Linux系统受内存碎片的影响较小
  • Linux系统可以更好地利用主内存,通常倾向于大量使用缓存,而Windows系统则倾向于大量使用虚拟内存
  • Linux内核会不断更新,并且通常会删除无用的部分,尽管Linus Torvalds表示Linux内核正在变得“庞大而膨胀”,相反,对NT内核的更新通常是在现有内核的基础上进行的。

3

我相信单靠内核是无法解决的。Windows 7是Windows第一次具有足够的响应能力,我认为它可以接受。

我相信更多的速度差异与@RobinJ的软件工程思想有关。Windows中的所有内容*都是通过某种Microsoft框架或其他框架在MSDN上构建的。这实际上与大企业对微软的热爱有关。Microsoft致力于帮助不同的程序/套件/技术相互交流。

下一步...使开发人员更轻松地涵盖要点(而不是重新发明轮子)Microsoft允许制造商捆绑和/或要求预编译的库,例如Microsoft Visual C ++ 2008 Redistributable。或.Net4.0,MSSQL 2005,广告素材。开发人员可以使用和构建价值约十年的软件包,并且要求最终用户在Windows计算机上安装才能使用新软件。

因此,为了加载程序Zyzzyx并运行,必须存在并运行一个或多个MSDN可再发行库。这些库确定程序如何与OS交互。

归根结底,我认为Window在数十年软件中的有意兼容性使其膨胀,并且有时比同类linux系统慢。还要注意,我已经为Windows开发了可视软件,但没有为Linux开发任何可视软件……不是GTK,Qt,Py等任何东西,因此我对linux的膨胀程度的假设只是这样。

编辑添加:此外,FOSS软件的确确实有人一直在对其进行改进,因此GTK将随着时间的推移而改进,而不是GTK-2005和GTK-2008处于同一台计算机上,而Microsoft一直在这样做。

* -好的,我敢肯定。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.