编程语言的性能降低真的是一件坏事吗?[关闭]


18

这是我的看法。

机器码,这是计算机运行某件事所需要的全部。计算机不在乎编程语言。对他们来说,机器代码来自Perl,Python还是PHP都无关紧要。编程语言不适用于计算机。他们为程序员服务。

一些编程语言的运行速度比其他语言慢,但这不一定是因为它们有问题。在许多情况下,这是因为它们可以执行程序员原本必须要做的更多工作(即内存管理),并且通过执行这些事情,他们在应做的工作中会更好-为程序员服务。

那么,编程语言的性能降低真的是一件坏事吗?


22
以什么方式变慢?编译时间,运行时,写入时间以及其他指标?
马特·艾伦

1
我只想指出,快速计算机和生成高效机器语言的编译器很不错,只不过它们使程序员更加懒惰。当产品出现性能问题时,通常是因为假设某些事情是“快速的”,例如内存管理和通知。
迈克·邓拉维

5
@Mike:或者,由于Jeff最近在他的博客中很好地总结了一种态度,程序运行缓慢:“算法适用于不知道如何购买RAM的人”。如果程序以立方时间而不是O(N log n)时间运行,则计算机功能对于大问题实际上并不重要。
David Thornley

2
@David:我们的服务器不能获得超过512Gb的RAM,因此我们现在必须编写更好的算法。
JBRWilkinson

2
取决于瓶颈在哪里。如果程序在99.9%的时间上等待I / O,则程序本身的速度是否比手工制作的Assembelr慢10倍并不重要。

Answers:


50

我认为这不会自动变坏。Python比C ++慢,但是当两者都足够快时,即使它较慢,Python可能也是解决当前问题的最佳选择。

总是一个权衡。对于一次性的小任务,编写Python脚本比执行相同操作的C ++应用要快得多(对我而言,典型的示例是某种批处理文本处理或遍历目录树并对文件执行某些操作),我并不在乎是花费10毫秒还是1000毫秒,即使它慢了100倍,因为它可能会花费我一半的时间来编写和测试。

当然,如果Python与C ++一样快,那就太好了,因此从这个意义上说,我同意您的说法:“慢=不好”。但是,我宁愿拥有一种功能强大的语言,只要不做任何事情(例如,检查原始数组的数组边界),就可以按照我想要的速度运行,只要它允许我决定何时进行权衡(例如,使用std: :向量)。


我没有说“慢=不好”。不过,感谢您分享您的想法。
Emanuil Rusev'Feb

9
+1“足够快”当实现“太慢/不够快”时,慢就不好。任何其他时间都没有关系。
Kirk Broadhurst,

4
+1“足够快”。根据您的操作,程序员的时间可能比执行时间的潜在节省多很多。
乔纳斯(Jonas)

3
@Jonas:几乎从来没有这样,只是您确实看到了程序员的薪水;您不会看到用户沮丧地垂头丧气,因为该应用程序一直在大声喊着“来吧,难道这堆废话软件”。如果他们发布了慢软件与快软件的总体拥有成本-您会立即发现自己的优先级被更改了。
gbjbaanb

1
@mcmcc:我不是在谈论语言,而是在谈论用户体验。当您单击按钮时,必须立即发生某些事情。启动计算时,只要有一个有用的进度指示器,就花一点时间就可以了。
乔纳斯(Jonas)2012年

18

很简单-慢是一件坏事

程序需要一定程度的性能时

因为没有这种性能,您将无法满足要求。

从需要在可接受的时间内处理查询的业务应用程序到需要在任何时间点在屏幕上显示大量信息的游戏,这都可以是任何东西。如果程序运行速度不够快,那就行不通了


2
..和通常的要求是一种不成文的“多X秒抓取网页,使普通用户网站移动到另一个网站,而不是”的方式
JBRWilkinson

1
@JBRWilkinson是的,或者,如果系统太慢,那么新的性能要求将会突然出现;)
Kirk Broadhurst

12

这样看:计算机是愚蠢的。他们温顺地遵循指示,任何带有触发表的白痴都可以遵循。他们顽固地坚持要做你所说的,而不是你的意思。切勿自我导向或直觉。这太糟糕了。

一台计算机所能达到的目标是,它速度很快。真!带有文件柜的指关节可以完成与数据库相同的工作。某人摇动印刷机可以完成Apache的工作。认真!实际上,他们已经进行了数百年的努力。为什么计算机对任何事物都有好处是其速度。

因此(与其他语言相比)无法利用的编程语言缺少了使用计算机的唯一优势。


13
您缺少了一个重要的方面:计算机是愚蠢的,快速的和可预测的,而人为错误的,在许多情况下,这种可预测性比纯粹的速度要重要得多。
SK-logic

5
任何编程语言都会利用计算机速度。一台原始OLPC计算机上的Python可以比我手工完成的速度快得多。请记住,我目前使用的笔记本电脑(两年前购买的,当时还不是顶级产品)在大多数方面都比我的第一台家用计算机强大十万到一百万倍。
David Thornley,

4
更不用说计算机要消耗大量的能源(尤其是服务器),而且能源消耗也令人担忧(绿色技术),而且通常更快的程序可以用与较慢的程序,因此很重要(尤其是在服务器上,这会消耗很多时间)
Coyote21 2011年

4
@ SK-logic计算机的可预测性被高估了。正如Joseph Weizenbaum很好地指出的那样,大型系统往往变得如此复杂,以至于它们是无法预料的,​​而且没有人能够预知特定执行的结果。这成为信仰或希望的问题。您不能正式证明程序将始终按照您的意图进行操作(因此它是不可预测的)。
奥马尔·科尔

2
但是,如果(执行)速度是最终目标,为什么我们都不用机器代码编写程序?
Emanuil Rusev 2011年

5

编程语言可以是非常高级的,“可以做很多事情”,但是仍然非常快。OCaml是比PHP更高级的语言,但是它生成的代码几乎与C一样快。Javascript与PHP一样动态,但是可以真正快速地执行。因此,主要是语言实现的问题,而不是设计的问题。动态语言更难有效实现,但并非没有。


您是否认为可以将运行速度较慢的语言(例如PHP)实现为运行速度更快?
2011年

1
Zend Optimizer有人吗?
2011年

让我问另一种方式-PHP的实现使它变慢了什么?
Emanuil Rusev'2

6
是的,可以更好地实施。这将需要大量的精力-例如,专门针对动态类型的抽象解释是一件棘手的事情,并且尚未得到充分研究。静态语言更容易转换为高效代码。因此,PHP之所以缓慢,主要是因为它是动态的。而且,好吧,它最初的实现非常差劲且不专业,并且还有许多其他脚本语言。
SK-logic

由Facebook启动的HipHop编译器可以将PHP转换为C ++代码,因此速度非常快。
JBR威尔金森

3

速度可以根据运行时间,初始开发时间和维护时间(移交问题/错误并产生新代码并部署它所花费的时间)来衡量。

脚本语言通常运行时间较慢,但维护时间较快,因为脚本化语言通常可以快速进行更改和部署,而不必重建整个系统,有时甚至不必停止并重新启动。

因此,取决于您所需的速度,很多都是平衡的。

上下文也很重要。花费0.5秒而不是0.1秒来加载初始配置没什么大不了的,但是在运行时,如果要处理100个查询,则花费0.5秒来执行查询而不是0.1秒可能是一件大事,因此需要50秒而不是10。


100ms有效地瞬间实现了用户感知。500ms非常引人注目。如果用户正在执行查询,则工作流程上会有明显的不同。
David Thornley

3

简单-客户喜欢快速的软件。实际上,计算机的全部目的是快速计算。


11
错误的,实际上。客户喜欢能够在预算范围内执行的软件。他们并不在乎屏幕的构建时间是19毫秒而不是15毫秒,因为他们从来没有注意到(如果构建过程需要15秒钟,那便是其他事情了)。他们也不在乎您是否使用“快速语言”,他们只想要符合规格且预算范围内的内容。
jwenting 2011年

4
19ms和15ms可能没有什么区别,但是500ms和300ms肯定有区别,这可能会在成功的产品和失败之间产生影响。
Nemanja Trifunovic

2
+1“客户喜欢在预算范围内执行的软件。” 另一方面,某些不直接为该软件付费的最终用户(例如大公司的员工)并不真正在意开发成本。当然,作为软件供应商,您最重要的任务是让真正付钱给您的人们满意。
ZsoltTörök

@Zsolt:这实际上取决于您正在开发的软件类型。我通常会在最终用户直接为产品付款或影响购买决策的产品上工作-他们不给我们规格,也不在乎我们的预算。也许我应该使用术语“用户”,而不是“客户”。
Nemanja Trifunovic

4
以用户(而不是开发人员)的身份讲,我可以说一般的响应能力(注意:不同于速度)是我决定选择一个程序而不是另一个程序的主要因素。例如,这就是我很少使用Java应用程序的原因之一。仅在JVM上的启动时间就会导致该区域的应用程序以-5000点开始;)。但是,严重的是,响应能力可以(通常确实)使您的产品UI笨拙或有效之间有所不同,并且有时,如果您使用的语言引起口吃或磁盘I / O等待很长,则可能难以实现。
Billy ONeal

3

慢是相对的。如果我有一个要求,读取端口每秒10次,这是不能创建一个二进制文件,可以做到这是一种语言过于缓慢。如果我正在写一个Web应用程序,其中服务器和浏览器/客户端之间的请求/响应顺序以秒为单位,并且用户可能在单击按钮之前在屏幕上花费了几分钟,那么该语言可以处理请求处理在1秒内可能足够快(当然大多数情况下要快得多)。

当然,编程语言可能是决定执行速度的一个因素,但这不是语言本身,而是与其附带的编译器和/或运行时。从Java的发展来看,这一点显而易见。多年来,JVM(即使在相同的硬件环境上)的性能也得到了大幅提高。当然,始终可以在您选择的任何环境中编写极其缓慢的代码。因此,诸如“ C ++比Java快十倍”之类的说法会自动被伪造,除非对所测试的条件以及测试方法进行准确的限定和量化。同样有可能在Java比C ++更快的情况下创建测试,这完全取决于您用作测试代码的方式以及执行方式。


3

由于不存在为程序员服务的编程语言,因此存在为创建服务用户的程序而存在的语言

如果您只需要一个简单的小个人工具一次执行某项操作,则它的速度可能会随您所愿。但是,一旦您开始向用户部署,他们就会在意速度和扩展性,特别是如果他们打算重复使用它时。(例如,安装程序可能会很慢;最好不要安装该程序。)这不仅是语言;还包括语言。这是整个程序。如果您的程序运行缓慢,用户将不会喜欢它。而且,如果您遇到竞争,那么不喜欢您的程序的用户将是一件非常糟糕的事情。因此,导致用户不喜欢您的程序(使程序变慢)的语言是不好的。

我是为广播媒体编写控制软件的团队的成员。如果您在美国,很有可能会在您喜欢的电视或广播电台上运行。绩效是我们最经常从客户那里听到的事情之一。它最初是为很少的单站操作而编写的,但是现在我们正在签署具有数百个频道的主要广播和有线网络,并且规模开始成为一个问题。如果我们不能让他们快速运转,他们将把他们数百万美元的合同交给有能力的人,我们最终会失业。这就是为什么我们使用快速的编译语言并优化数据库内容的原因。


3

因为越快越好。时间就是金钱。如果您编写服务器软件并且使用较慢的编程语言,则您会购买更多服务器。如果您编写收缩包装的软件,则会将客户吸引到速度更快的竞争对手。

对于人们使用的任何持久软件,我们通常都希望尽快。在组装级别,上市时间增加太多,以至于无法盈利。这都是权衡。从业务的角度来看,如果这意味着产品比您的竞争对手要快,让可怜的程序员用C ++调试内存错误并再执行几个月,可能会更有利可图。

因此,速度实际上在许多软件中都很重要。如今,慢速语言被认为是“不好的”,因为它们确实太慢了(Python很容易慢50倍-100倍,这太多了)


2

存在为程序员服务的编程语言。

我不知道你是怎么得出这个结论的。我会说:软件工程师使用编程语言来满足他们的需求。

有些编程语言比其他编程语言要慢,但这不是因为它们有问题。

这也是一个轻松的声明。在此处使用“较慢”一词来定义您的意思。较慢可能意味着:

  1. 达到相同目的的最终程序在一种语言中的运行速度要慢于另一种语言。
  2. 创建最终程序所花费的时间可能更长(因此,有些人将其描述为“更慢”)。

想到的这两个问题也交织在一起,在开发和性能上花费的时间之间存在某种权衡。


3
您说的很对,“软件工程师根据需要使用编程语言”。这仅支持“存在用于服务程序员的编程语言”的说法。
Emanuil Rusev'2

1
我会说:软件工程师使用编程语言解决问题(通常不是他们自己的问题,而是客户的问题)。
彼得Török

@Emanuil:我不会说“锤子是用来打杂工/人的”,而是要用锤子来完成一项任务(例如,用锤子钉子,打你不喜欢的人,等等)。@Péter:我想知道有多少人只写“ @Peter”。但是,如果您能为所有问题创造“问题”一词,我认为我们的声明实际上是同义词。
JK

1

像任何软件一样,运行缓慢可能表示存在潜在问题/设计不良。诚然,设计有点犹豫不决,但这丝毫不减损它现在所基于的设计原则已经过时并且被认为是“糟糕”的事实。

以经典ASP和ASP.net为例。


1

有人评论说“客户喜欢在预算范围内执行的软件”。是的,这是真的-但它与缓慢的软件有很大关系,而且,按照定义,这几乎意味着缓慢的编程语言(和框架),算法和配置。慢速编程语言可能是所有上述方法中最重要的部分,这仅仅是因为它是最难更改的基础。如果您使用Oracle数据库并且需要更多性能,则可以优化表/索引/等。简单。如果您的代码中算法较差,则可以编写其他代码。如果您的框架很慢,则可以替换它-并不是那么容易,但是可以实现而无需重写所有内容。如果您的语言太慢,则实际上必须重新开始。

请参阅Facebook,了解他们在需要扩展时使PHP足够快地运行所带来的麻烦。

对于我们其他人来说,“非功能性能要求”通常会写到规范中,尤其是对于可伸缩的Web应用程序。无法完成“必须在请求后2秒钟内向用户显示该页面”,您将失去合同(或支付罚款)。因此,是的,客户喜欢执行要求的软件-那些要求会说它必须快速(您可能并不在乎用户盯着沙漏花费了多长时间,但客户肯定会花很多时间-但这笔费用很高)。

例如,在一个大型的呼叫中心,我被告知他们确定,您可以在接听电话过程中节省的每一秒钟,可以“缩减”一名呼叫者的身形。那真是一笔不菲的钱,这对于老板们获得更快,更高效,更实用的软件是巨大的刺激。

有很多时间花在担心程序员尽可能快地编写代码上(然后一直进行单元测试和重构,哈哈)。我发现这并不是人们认为的那么重要的因素-如果您是语言专家,则可以比没有经验的人更快地编写代码。因此,熟练的C ++开发人员可以比新手PHP开发人员更快,更准确地编写代码。因此,我认为成为专家比选择“轻松”语言更为重要,这就是为什么我不喜欢如今看来无处不在的“用酷炫的新东西重写”的崇拜。


1

我要指出的是,大多数性能问题的存在是因为程序员做得不好,不是因为语言太慢。确实,性能方面比您选择的语言要担心的事情还要多。那将是我列表上第1203407407位。


0

那么,编程语言的性能降低真的是一件坏事吗?

其他所有条件都是平等的,快一点是一件好事。毕竟,没有人真正想等待更长的时间才能获得某些结果,而一旦完成该结果,它便可以将资源腾出用于其他事情。

但并非所有其他条件都是平等的。对于初学者来说,产生正确的结果或至少正确的结果也很重要。(如果允许完全错误的结果,则您确实可以非常快速地产生这些结果,并且对任何人来说它们的价值都将完全为零。)如果更改某种程度较慢的语言,则更有可能产生正确的结果,通常是巨大的权衡。高级别的语言在这里比低级别的语言有一个优势,因为它们丰富的模型集通常可以更轻松地表达复杂的问题,而无需压倒性的太多细节。

通常,首先要管理生产软件的成本,根据需要添加新功能以及在基础系统发生变化时保持其正常运行的成本也很重要。高级语言通常允许更快的编程周转,并且将编程成本保持在预算之内有很多价值。实际上,将成本控制在最低水平可以总体上实现更多不同的事情,这通常是一件好事。

最后要注意的关键点是,不必只使用一种语言,并且许多软件系统的大部分组件对性能都不重要。明智的做法是使用低级语言为关键位生成高性能组件,而将不太关键的部分留给高级语言(以使它们的生产成本降至最低)是明智的。而且,构成良好的低级语言的功能(能够精确控制机器的功能)不是构成良好的高级语言的功能(能够从更小的描述中推断出细节的功能):它们是完全对立的,因此能够将它们结合在一起并利用它们的优点而避免缺点,这确实是一件好事。

哪些组件应进行高性能处理?优化?测量它们。剖析它们。找到真相而不是猜测。将精力集中在最有用的地方。

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.