为什么在Windows上ruby比较慢?

Ruby在Windows上慢得多的具体技术原因是什么? 人们报告说,从Linux / OSX下降了3倍的速度,关于Ruby的一些模糊的讨论使用Windows版本的编译器生成慢速代码,但我找不到任何具体的细节。

有人知道具体情况吗? 我不喜欢嘟嘟Wind Wind su y yu yu。

我猜想有几个可能的select,他们可能都加起来:

  1. Ruby主要是在Linux上开发的,因此最终会对其进行机械优化。 该代码经常testingWindows,一切正常,但结果仍然是开发人员将花费更多的时间优化Linux比Windows。
  2. 根据我的经验,gcc(4.3及更高版本)的最新版本产生的代码比Visual Studio的最新版本(至less2005)更高效。 我的testing包括在这两种情况下花费大约一天的时间find代码优化的最佳select。
  3. 与第一点相关的是,如果你使用gcc for Windows或者Linux来编译同一个项目,那么通常我会观察到Windows的性能比Linux要低20%左右。 在这里,我想这是因为Linux(或一般Unices)是gcc的主要目标,windows是一个端口。 用于Windows优化的时间比Linux短。

最后,如果想要优化Ruby for Windows,就必须花费大量的时间(并且据我所知,在Windows上的分析器并不是免费的)花费在使用分析器和优化瓶颈。 所有的东西都必须在Linux上进行testing,以确保性能没有任何损失。

当然,所有这些都应该再次与他们的新翻译YARV进行testing。

我对YARV解释器的源代码做了很多工作,所以下面的注释只涉及1.8.6 MIR解释器。

在试图在Visual Studio中为Ruby编写C扩展的过程中,我惊讶地发现Ruby 1.8.6的可下载的Windows二进制文件是使用Visual C ++ 6.0编译的,而Visual C ++ 6.0是在第二次世界大战结束后不久发布的。 自那时以来,编译器(以及它们的目标处理器)已经有了相当的进步 尽pipeLinux构build了最新的gcc优点,但Windows构build与上个世纪的编译器技术一起徘徊不前。 这是一个原因。 (免责声明:假设1.9是用mingw来构build的,其中我不是粉丝,但也要比VC6好)

不知道特别是你在Windows上发现哪些操作比较慢,很难做进一步的评论,但是我会注意到,我发现Ruby上的I / O实现与networking和本地文件I / O的性能相差无几。 我从来没有深入了解I / O原语的实现情况,以了解为什么,但是我假设这些实现假定Linux上的快速IO构造是Windows上的快速IO构造,这几乎总是不是这种情况。

首先,你需要区分旧的MRI解释器 (版本高达1.8)和更新的YARV ,这是Ruby 1.9的官方解释器。 在Ruby 1.9中有很大的性能改进和不同的devise,所以需要知道你正在讨论哪个版本。 我猜你所读的是指1.8.x版本,这是迄今为止唯一一个具有一键式安装程序的版本。

此外,如果您正在讨论Ruby on Rails性能或Ruby,这将是一件好事。 我知道这两者之间应该有明确的区别,但是因为Ruby on Rails是Ruby的主要用途,所以人们经常谈论它的performance,就好像他们谈论Ruby的performance一样。

至于编译器,Ruby可以使用任何最新版本的Visual Studio来构build,这是非常好的。 我猜如果这样的性能差异确实存在的话,我们应该看一下解释器的实现,看看是否有什么东西可以使POSIX和Windows系统有所不同。

不是完全针对你的问题,但是深度炸字节播客讨论了IronPython上下文中的相同问题。 我理解你的问题属于Ruby,但是可能有相关的问题也会影响到Ruby。

另外,讨论的内容比“Windows糟糕”的performance要好一些,所以值得检查一下。

性能颠簸不是300%,一般来说,接近50%-100%。 随便Jim的解释是为什么数据处理脚本比Unix变种和Linux更慢的原因之一。

在更一般的情况下,我能想到的唯一的事情就是Ruby的开发是以Linux为中心的,这就导致了许多Unix的构造方式。 另外,由于大多数活跃的开发人员不是Windows用户,因此团队中很less有Windows优化专业知识,大多数性能优化决策都着眼于在Unix系统上加快速度。

一个具体的例子就是Ruby使用copy-on-writeparameter passing,根据我所读到的,在Windows上无法正确完成,导致方法调用的开销很大。

我似乎无法弄清楚,偶然的吉姆应该得到-8票。

ntfs在Windows上的自动文件压缩是放慢了我的一切。 它会自动开始工作,当你在高清空间低…然后它需要解压缩和重新压缩文件,当你访问它们,浪费CPU周期..

运行以下命令,从根目录解压整个NTFS驱动器(即“C:\”),看看是否有任何差异,对我来说,它有很大的不同,并使ruby / rails的速度恢复到之前的水平!

命令是:

compact /u /s /i