プログラミング言語のパフォーマンスが遅いのは本当に悪いことですか?[閉まっている]


18

ここに私がそれを見る方法があります。

マシンコードがあり、コンピューターが何かを実行するために必要なのはそれだけです。コンピューターはプログラミング言語を気にしません。マシンコードがPerl、Python、またはPHPのどれであるかは関係ありません。プログラミング言語はコンピューターに役立ちません。プログラマーに役立ちます。

一部のプログラミング言語は他のプログラミング言語よりも動作が遅くなりますが、それは必ずしも問題があるためではありません。多くの場合、それは、プログラマーがしなければならないこと(つまり、メモリ管理)をより多く行うためであり、これらのことを行うことにより、プログラマーにサービスを提供することになります。

それでは、プログラミング言語のパフォーマンスの低下は、本当に悪いことですか?


22
どのように遅くなりますか?コンパイル時間、ランタイム、書き込み時間、その他のメトリック?
マットエレン

1
高速なコンピューターと、効率的な機械語を生成するコンパイラーは、プログラマーが大幅に怠allowになることを除いて、明らかに優れいること指摘しておきます。製品にパフォーマンスの問題がある場合、多くの場合、メモリ管理や通知など、特定のものが「高速」であると想定していることが原因です。
マイクダンラベイ

5
@マイク:あるいは、最近ジェフがブログでうまくまとめた態度のために、プログラムは遅くなります:「アルゴリズムはRAMの購入方法を知らない人向けです」。プログラムがO(N log n)時間ではなくキュービック時間で実行されている場合、コンピューターの処理能力は大きな問題に対して実際には問題になりません。
デビッドソーンリー

2
@David:サーバーに512Gbを超えるRAMを搭載することはできないため、より良いアルゴリズムを作成する必要があります。
JBRWilkinson

2
ボトルネックがどこにあるかによって異なります。プログラムが99.9%の時間I / Oで待機する場合、プログラム自体が手作りのassembelrで作成された場合よりも10倍遅いかどうかは関係ありません。

回答:


50

自動的に悪いとは思わない。PythonはC ++よりも遅いですが、両方とも十分速い場合は、たとえ遅いとしても、Pythonは目前の問題に最適な選択肢です。

それは常にトレードオフです。小さな1回限りのタスクの場合、同じことを行うC ++アプリよりもPythonスクリプトを書く方がはるかに高速です(私の典型的な例は、何らかのバッチテキスト処理またはディレクトリツリーをたどってファイルに何かをすることです)。書き込みとテストにかかる時間が半分になる可能性があるため、100倍遅いにもかかわらず、10ミリ秒か1000ミリ秒かはあまり気にしません。

もちろん、PythonがC ++と同じくらい高速であればいいので、その意味で「遅い=悪い」というあなたの声明に同意します。しかし、私はむしろ、そのトレードオフをいつ行うかを決めることができる限り(たとえば、stdを使用して)、何もしない(たとえば、生の配列の配列境界チェック)ことで、できるだけ速く実行する強力な言語を持っています: :ベクター)。


「遅い=悪い」とは言いませんでした。それにもかかわらず、あなたの考えを共有してくれてありがとう。
エマニュイルルセフ

9
実装が「遅すぎる/十分に速くない」場合、「十分に速い」+1が遅い。それ以外の場合は問題ではありません。
カークブロードハースト

4
+1「十分に速い」。何をするかに応じて、プログラマーの時間は、実行時間の潜在的な節約よりもはるかに価値があります。
ジョナス

3
@Jonas:そのようなことはほとんどありません。プログラマーの給与が表示されるだけです。アプリが「さあ、どれだけ難しいか、くだらないソフトウェアの山だ」と叫びながら、ユーザーがフラストレーションで頭を垂れているのを見ることはありません。低速ソフトウェアと高速ソフトウェアのTCOを公開している場合、優先順位が変更されるとすぐに営業部門が変更されます。
gbjbaanb

1
@mcmcc:私はそこでの言語についてではなく、ユーザー体験について話していました。ボタンをクリックすると、すぐに何かが発生します。計算を開始するとき、有用な進行状況インジケーターがある限り、時間がかかる場合は問題ありません。
ジョナス

18

非常に簡単です-遅いことは悪いことです

ときプログラムは、一定レベルのパフォーマンスを必要とします

なぜならそのパフォーマンスずに要件を満たしていません。

これは、許容可能な時間内にクエリを処理する必要があるビジネスアプリケーションから、任意の時点で多くの情報を画面に表示する必要があるゲームまで、あらゆるものになります。プログラムの速度が十分でない場合、機能しません


2
..andしばしば要件は道「ページではなく別のサイト上に平均ウェブサイトのユーザーの動きを作る取得するために、よりX秒以内」の一種で書き込まれていないです
JBRWilkinson

1
@JBRWilkinsonはい、またはシステムが遅すぎる場合、新しいパフォーマンス要件が突然表示されます;)
カークブロードハースト

12

このように見てください:コンピューターは愚かです。彼らは、たまに、トリガーテーブルを持つバカが従うことができる指示に従います。彼らはあなたが意図したことの代わりに、あなたが言ったことを頑張って主張します。自己指示や直感の断片ではありません。恐ろしいです。

コンピューターが目的としているのは、高速です。本当に!ファイリングキャビネットを備えたナックルヘッドは、データベースと同じ仕事をすることができます。印刷機をクランキングする一部の人は、Apacheの機能を実行できます。まじで!そして彼らは何百年もの間、事実問題としてDIDをしました。コンピューターが何にでも適している理由は、その速度です。

そのため、プログラミング言語は(他の言語と比較して)悪用できず、コンピューターを使用する唯一の利点を失います。


13
1つの重要な点が欠けています:コンピューターは愚かで、高速で、予測可能ですが、正誤表は多くの場合、この予測可能性は純粋な速度よりもはるかに重要です。
SKロジック

5
どのプログラミング言語もコンピューターの速度を活用します。オリジナルのOLPCコンピューターの1つであるPythonは、手作業で行うよりもはるかに高速に処理します。私の現在のラップトップ(2年前に購入したもので、当時のトップではありません)は、ほとんどの点で最初の家庭用コンピューターよりも約10万倍から100万倍強力です。
デビッドソーンリー

4
コンピューターが使用するエネルギーを大量に消費すること(特にサーバー)、およびエネルギー消費(グリーンテクノロジー)に懸念があることは言うまでもありません。また、通常、高速プログラムは、遅いプログラム、そのためカウント(特にサーバー上で、大量に消費する)
Coyote21

4
@ SK-logicコンピューターの予測可能性は誇張されています。ジョセフヴァイツェンバウムが非常によく指摘したように、大規模システムは非常に複雑になる傾向があり、予測不可能であり、特定の実行の結果を予測することはできません。それは信仰や希望の問題になります。プログラムが意図したことを常に実行することを正式に証明することはできません(したがって、予測不可能です)。
オマールコール

2
それでも、(実行の)速度が最終的な目標である場合、なぜ私たち全員がマシンコードでプログラムを作成しないのでしょうか。
エマニュイルルセフ

5

プログラミング言語は非常に高レベルで、「多くのことを行う」ことができ、それでも非常に高速です。OCamlはPHPよりも高レベルの言語ですが、Cとほぼ同じ速度でコードを生成します。JavascriptはPHPと同じくらい動的ですが、非常に高速に実行できます。そのため、これは主に言語の実装に関する問題であり、設計ではありません。動的言語は効率的に実装することは困難ですが、不可能ではありません。


PHPなどの(実行の観点から)低速と見なされる言語を実装して、より高速に実行できると思いますか?
エマニュイルルセフ

1
Zend Optimizerをお持ちですか?
user281377

これを別の方法で聞いてみましょう-PHPの実装で何が遅くなりますか
エマニュイルルセフ

6
はい、より適切に実装できます。それには多くの努力が必要になります-例えば、動的型を専門化するための抽象的な解釈は非常に難しいものであり、まだ十分に研究されていません。静的言語は、非常に簡単に非常に効率的なコードに変換できます。そのため、PHPは主に動的であるため低速です。そして、まあ、もともと非常に貧弱で専門的でない実装と、他の多くのスクリプト言語がありました。
SKロジック

Facebookによって開始されたHipHopコンパイラーは、PHPをC ++コードに変換できるため、非常に高速です。
JBRウィルキンソン

3

速度は、実行時間、初期開発時間、およびメンテナンス時間(問題/バグを引き継ぎ、新しいコードを生成して展開するのにかかる時間)の観点から測定できます。

通常、スクリプト言語の実行時間は遅くなりますが、メンテナンス時間は短くなります。これは、多くの場合、システム全体を再構築することなく、場合によっては停止して再起動することなく迅速な変更と展開ができるためです。

したがって、多くはあなたが必要とする速度に応じてバランスです。

コンテキストも重要です。0.1秒ではなく0.5秒かかって初期構成をロードすることは大したことではありませんが、実行時に、100秒のクエリを処理する必要がある場合、0.1秒ではなく0.5秒かかってクエリを実行するのは大したことです。 10。


100ミリ秒は、ユーザーの知覚において事実上瞬時です。500msは非常に顕著です。ユーザーがクエリを実行している場合、それはワークフローの顕著な違いです。
デビッド・ソーンリー

3

シンプル-顧客は高速ソフトウェアが大好きです。実際、コンピューターの全体的な目的は、迅速に計算することです。


11
間違って、実際に。顧客は、要件を満たし、予算内で機能するソフトウェアを愛しています。画面の構築に15ミリ秒ではなく19ミリ秒かかっても、気づかないため、あまり気にすることはありません(構築に15秒かかる場合、それは別のことです)。また、「高速言語」を使用するかどうかは気にせず、仕様どおりに予算内で機能するものが必要です。
jwenting

4
19ミリ秒と15ミリ秒では違いはありませんが、500ミリ秒と300ミリ秒では明確に違いがあり、製品の成功と失敗の違いが生じる場合があります。
ネマンジャトリフノビッチ

2
+1「顧客は、要件を満たし、予算内で機能するソフトウェアを愛しています。」一方、大企業の従業員のように、ソフトウェアに直接料金を支払わない特定のエンドユーザーは、開発コストをあまり気にしません。もちろん、ソフトウェアベンダーとして最も重要なタスクは、実際にあなたにお金を払ってくれる人々を幸せに保つことです。
ゾルトTörök

@Zsolt:それは本当にあなたが開発しているソフトウェアの種類に依存します。私は通常、エンドユーザーが製品に直接支払うか、購入決定に影響を与える製品に取り組んでいます。彼らは仕様を与えず、予算を気にしません。「顧客」ではなく「ユーザー」という用語を使用する必要があったのかもしれません。
ネマンジャトリフノビッチ

4
ユーザーとして(開発者としてではなく)話すとき、一般的な応答性(注:速度とは異なる)は、あるプログラムを別のプログラムよりも選択する決定の主な要因であると言えます。これが、たとえばJavaアプリケーションをほとんど使用しない理由の1つです。JVMのみでの起動時間は、この領域で-5000ポイントで開始するアプリになります;)。真剣に、応答性は製品のUIを不格好にするか効果的にするか(しばしば)違いを生じさせることがあり、使用している言語がスタッターまたは長いディスクI / O待機を引き起こす場合、達成するのが難しい場合があります。
ビリーONeal

3

遅いのは相対的です。1秒間に10回ポートを読み取る必要がある場合、それを実行できるバイナリを作成できない言語は遅すぎます。私がサーバーとブラウザ/クライアント間のリクエスト/レスポンスシーケンスを数秒で測定し、ユーザーがボタンをクリックする前に画面上で数分を費やす可能性があるWebアプリケーションを書いている場合、リクエスト処理を処理できるプログラミング言語1秒でおそらく十分に高速になります(ほとんどの場合、はるかに高速です)。

もちろん、プログラミング言語は実行速度を決定する要因になるかもしれませんが、それは言語そのものではなく、それに付属するコンパイラーやランタイムです。これは、Javaの開発を見れば明らかです。JVMのパフォーマンスは(同じハードウェア環境であっても)長年にわたって劇的に向上しています。そしてもちろん、どんな環境を選んでも、ひどく遅いコードを書くことは常に可能です。そのため、「C ++はJavaの10倍高速です」などの主張は、どの条件がどのようにテストされたかを正確に特定および定量化しない限り、自動的に偽物です。JavaがC ++よりも高速なテストを作成することも同様に可能です。テストコードとして使用しているものと実行方法に依存します。


3

プログラマーにサービスを提供するプログラミング言語は存在しないため、ユーザーにサービスを提供するプログラムを作成するために存在します

一度だけ何かをするためのシンプルで小さな個人用ツールが必要な場合、それはあなたが望むほど遅くなります。ただし、ユーザーへの展開を開始すると、特に繰り返し使用する場合は、速度とスケーリングが重要になります。(たとえば、インストーラーは遅くなる可能性があります。インストールするプログラムは遅くない方がよいでしょう。)そして、それは言語だけではありません。それは全体的なプログラムです。プログラムが遅い場合、ユーザーは気に入らないでしょう。そして、競争がある場合、ユーザーがあなたのプログラムを好まないことは非常に悪いことです。そのため、ユーザーのプログラムが好きではない(低速にすることで)ユーザーに貢献する言語は悪いです。

私は、放送メディア用の制御ソフトウェアを作成するチームの一員です。米国にいる場合は、お気に入りのテレビやラジオ局が実行されている可能性があります。パフォーマンスは、クライアントからよく耳にするものの1つです。もともとは小規模な単一ステーションの運用向けに作成されていましたが、現在では数百のチャンネルを持つ主要な放送およびケーブルネットワークに署名しており、規模が問題になり始めています。私たちが彼らのために物事を速く走らせることができなければ、彼らは数百万ドルの契約をできる人に引き継ぐでしょう、そして私たちは仕事を失います。そのため、高速でコンパイルされた言語を使用し、データベースを完全に最適化します。


3

速いほど良いからです。時は金なり。サーバーソフトウェアを作成し、より遅いプログラミング言語を使用する場合、より多くのサーバーを購入します。シュリンクラップされたソフトウェアを書くと、より速いライバルに顧客を失うことになります。

人々が使用する永続的なソフトウェアの種類については、通常は可能な限り高速にしたいと考えています。アセンブリレベルでは、市場投入までの時間が非常に長くなるため、利益がありません。すべてのトレードオフです。ビジネスの観点から見ると、貧しいプログラマーがC ++でメモリエラーをデバッグできるようにすると、製品が競合他社よりも高速であるという意味で、さらに数か月間行うことができます。

そのため、多くのソフトウェアでは実際に速度が重要です。遅い言語は、実際には遅すぎるため、「悪い」と見なされています(Pythonは簡単に50倍から100倍遅くなりますが、それは大きすぎます)。


2

プログラマーに役立つプログラミング言語が存在します。

どうやってこの結論に至ったのか分かりません。私は言う:ソフトウェアエンジニアが使う自分のニーズのためのプログラミング言語を。

一部のプログラミング言語は他のプログラミング言語よりも遅いですが、それはそれらに何か問題があるからではありません。

これはまた、控えめな文です。ここで「遅い」という言葉を使用して、意味を定義します。遅いとは次のことを意味します。

  1. 同じことを実現する最終プログラムは、ある言語で他の言語と比較して「遅い」動作をします。
  2. 最終プログラムの作成にかかる時間が長くなる可能性があります(したがって、「遅い」と説明する人もいます)。

思い浮かぶこれらの2つの問題は、開発とパフォーマンスに費やされる時間の間に何らかのトレードオフがある場合にも絡み合っています。


3
あなたは、「ソフトウェアエンジニアがニーズに応じてプログラミング言語を使用する」と言っています。これは、「プログラマーに役立つプログラミング言語が存在する」というステートメントのみをサポートしています。
エマニュイールルセフ

1
ソフトウェアエンジニアは、問題を解決するためにプログラミング言語を使用します(通常は自分の問題ではなく、クライアントの問題です)。
ペテルトレック

@Emanuil:私は「ハンマーは便利屋/人間に役立つ」とは言いませんが、ハンマーはタスクを完了するために使用されます(例えば、釘を打つ、嫌な人を打つなど)。@Péter:「@Peter」と書いている人はどれくらいいるのだろうか。しかし、すべてに対して「問題」という用語を作り出すことができれば、私たちの声明は事実上同義語だと思います。
JK

1

他のソフトウェアと同様に、低速であることは、根本的な問題/設計の誤りの兆候です。確かにデザインはちょっとした精神論者ですが、これは現在のデザイン原則が古く、「悪い」と考えられているという事実を損なうものではありません。

たとえば、クラシックASPとASP.netを取り上げます。


1

ある人は、「顧客は要件を満たし、予算内で機能するソフトウェアを好む」とコメントしました。まあ、これは本当です-しかし、それは遅いソフトウェアにかなりの関係があります、そして、それはほとんど定義上、遅いプログラミング言語(およびフレームワーク)とアルゴリズムと構成を意味します。スロープログラミング言語は、上記のすべての中で最も重要な部分である可能性があります。それは、変更が最も困難であることがわかる基盤だからです。Oracle DBを使用していて、さらにパフォーマンスが必要な場合は、tables / index / etcを最適化できます。簡単です。コードに貧弱なアルゴリズムがある場合、別のコードを書くことができます。フレームワークが遅い場合、それを置き換えることができます-それはそれほど簡単ではありませんが、すべてを書き直さなくても実行可能です。言語が遅すぎる場合は、実際にやり直す必要があります。

スケーリングが必要なときにPHPを十分高速に動作させるための手間については、Facebookを参照してください。

特にスケーラブルなWebアプリの場合、残りの部分では、「非機能パフォーマンス要件」が仕様に記載されることがよくあります。「リクエストの2秒以内にユーザーにページを表示する必要があります」を満たさないと、契約を失います(またはペナルティを支払う)。 (ユーザーが砂時計をじっと見つめる時間は気にかけないかもしれませんが、顧客は確かにそうです-それは莫大なコストです)。

例として、大規模なコールセンターで、1秒ごとに1人のコールテーカーを「縮小」できると判断したと言われました。それは突然本当のお金であり、上司がより速く、効率的で使いやすいソフトウェアを手に入れるための大きなインセンティブです。

プログラマーがコードを可能な限り高速に切り出すことを心配するのに多くの時間を費やしています(そしてユニットテストとリファクタリングを常にしています)(笑)。私は、これが人々が考えるほど多くの要因ではないことを発見しました-あなたがあなたの言語の専門家なら、あなたは経験の浅い場合よりもはるかに速くコーディングできます。そのため、熟練したC ++開発者は、初心者のPHP開発者よりも迅速かつ正確にコードを記述できます。ですから、「簡単な」言語を選ぶよりも専門家になることが重要だと思います。だからこそ、今日どこにでもあるような「クールで新しいものに書き直す」というカルトが嫌いです。


1

パフォーマンスの問題のほとんどは、言語が遅すぎるためではなく、プログラマーが悪い仕事をしたために存在することを指摘します。本当に、選択した言語よりもパフォーマンスに関して心配するべき多くの関連する事柄があります。それは私のリストの約1,203,407番目になります。


0

それでは、プログラミング言語のパフォーマンスの低下は、本当に悪いことですか?

他のすべてが平等で、高速化するのは良いことです。結局のところ、誰も実際にいくつかの結果をもっと長く待ちたくないし、その結果が完了すると、他のことのためにリソースを解放することができます。

しかし、他のすべてが同等というわけではありません。手始めに、権利を生み出すことも重要です結果、または少なくとも十分な結果です。(完全に間違った結果が許容される場合、実際にそれらを非常に迅速に生成でき、誰に対してもまったくゼロの値になります。)多少遅い言語への変更により正しい結果が生成される可能性が高くなる場合、それは通常大きなトレードオフ。高レベルの言語は、ここでの低レベルの言語よりも利点があります。通常、豊富なモデルセットにより、圧倒的に多くの詳細を明示することなく、複雑な問題を表現しやすくなります。

通常、最初にソフトウェアを生産するコストを管理し、必要に応じて新しい機能を追加し、基盤となるシステムの変更に応じて機能を維持することも重要です。高レベル言語は通常、プログラミングのターンアラウンドを高速化し、プログラミングのコストを予算内に抑えることには多くの価値があります。実際、そこにコストを抑えることで、全体としてより多くの異なることを達成できます。これは一般に良いことです。

最後に注意すべき重要な点は、1つの言語だけを使用する必要なく、多くのソフトウェアシステムでは、コンポーネントの大部分がパフォーマンスクリティカルではないことです。低レベルの言語を使用して重要なビットの高性能コンポーネントを作成するのが賢明であり、重要度の低い部分を高レベルの言語に残すことで(それらの作成コストを最小限に抑えるため)非常に賢明です。さらに、優れた低レベル言語を作成する機能(マシンの動作を正確に制御する機能)は、優れた高レベル言語を作成する機能(非常に小さな記述から詳細を推測する機能)ではありません。正反対にあるので、それらを一緒に結合し、それらを強みのために使用し、弱点を避けることができることは、本当に素晴らしいことです。

どのコンポーネントが高性能の治療を受けるべきですか?最適化?それらを測定します。それらをプロファイルします。推測するのではなく、真実を見つけてください。最も効果のある場所に努力を集中してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.