はい、Pythonは遅いですが、気にしません

生産性のために生産性の低下について話します。









Pythonでのasyncioの議論から少し休憩して、Pythonの速度について説明します。 自己紹介をしましょう。私はPythonの熱烈なファンであり、可能な限りそれを使用しています。 この言語に反対する理由の1つは、遅いことです。 「Xの方が速い」という理由だけで作業することさえ拒否する人もいます。 このテーマに関する私の考えは次のとおりです。



パフォーマンスはもはや重要ではありません



非常に長い間実行されていたプログラム。 CPUおよびメモリリソースは高価であり、実行時間は重要な指標でした。 そして、彼らは電気代をいくら払ったのでしょう! ただし、主なルールは次のとおりです。

最も高価なリソースの使用を最適化します。
歴史的に、プロセッサ時間は最も高価でした。 これはまさに、コンピューターサイエンスの研究でもたらされているものであり、さまざまなアルゴリズムの有効性に焦点を当てています。 悲しいかな、これはもはや事実ではありません-ハードウェアは今までよりも安くなり、その後、実行時間が安くなっています。 最も高価なのは、従業員、つまりあなたの時間です。 プログラムを高速化するよりも、問題を解決することがはるかに重要です。 記事を読み終えるだけの人に繰り返します。

プログラムを高速化するよりも、問題を解決することがはるかに重要です。


あなたは反対するかもしれません:「私の会社はスピードを気にかけています。 すべての応答がxミリ秒未満で届くWebアプリケーションを作成しています。「または」クライアントは、アプリケーションが遅すぎると考えたために残されました。」 速度はまったく重要ではないと言っているのではなく、速度が最も重要でなくなったと言いたいだけです。 これは最も高価なリソースではありません。







重要なのはスピードだけです。



プログラミングのコンテキストで「速度」という言葉を使用する場合、おそらくCPUのパフォーマンスを意味します。 しかし、CEOがプログラミングに関連して使用する場合、ビジネスのスピードを意味します。 最も重要な指標は、市場投入までの時間です。 最終的には、製品の動作速度、製品のプログラミング言語、製品の実行に必要なリソースの量は関係ありません。 あなたの会社を存続させるか、または死なせる唯一のことは、市場投入までの時間です。 アイデアがどれだけ早く収入を生み出し始めるかについてではなく、製品の最初のバージョンをどれだけ早くリリースできるかについて話しています。 ビジネスで生き残るための唯一の方法は、競合他社よりも速く成長することです。 競合他社がより早く実装する場合、アイデアの数は関係ありません。 あなたは市場で最初でなければなりません、または少なくとも追いつく必要があります。 少し減速し、そして滅びる。

ビジネスで生き残るための唯一の方法は、競合他社よりも速く成長することです。


マイクロサービスについて話しましょう



Amazon、Google、Netflixなどの大企業は、急速な開発の重要性を理解しています。 彼らは明確にビジネスを構築し、迅速に革新します。 マイクロサービスはこれを支援します。 この記事は、それらにアーキテクチャを構築する必要があるかどうかとは関係ありませんが、少なくともAmazonとGoogleがそれらを使用することに同意します。 マイクロサービスは本質的に低速です。 彼らのまさにコンセプトは、ネットワークコールを使用することです。 つまり、関数を呼び出す代わりに、ネットワークを散歩します。 パフォーマンスの面で何が悪いのでしょうか?! ネットワークコールは、プロセッササイクルと比較して非常に遅いです。 ただし、大企業は依然としてマイクロサービスベースのアーキテクチャを構築することを好みます。 何が遅くなるのか本当に分かりません。 このアプローチの最大のマイナスはパフォーマンスであり、プラスは市場投入までの時間です。 小さなプロジェクトとコードベースを中心にチームを構築することにより、企業はより迅速に反復および革新を行うことができます。 非常に大規模な企業でも、スタートアップだけでなく、市場投入までの時間を重視していることがわかります。



プロセッサはボトルネックではありません。



Webサーバーなどのネットワークアプリケーションを作成している場合、プロセッサがアプリケーションのボトルネックではない可能性があります。 要求を処理する過程で、たとえばデータベースまたはキャッシュに対していくつかのネットワーク呼び出しが行われます。 これらのサーバーは任意に高速にすることができますが、すべてがネットワーク上のデータ転送速度に依存します。 以下は、各操作の実行時間を比較した非常にクールな記事です。 その中で、著者はプロセッササイクルごとに1秒を考慮しています。 この場合、カリフォルニアからニューヨークへのリクエストは4年間延長されます。 ここにそのような遅いネットワークがあります。 おおよその計算では、データセンター内のネットワークを介してデータを送信するのに約3ミリ秒かかると仮定します。これは、基準規模で3か月に相当します。 次に、CPUをロードするプログラムを取り上げます。 彼女が1つのコールを処理するのに100,000サイクルが必要だとすると、これは1日に相当します。 5倍遅い言語で書くとしましょう-5日かかります。 3か月待つ準備ができている人にとって、4日間の差はそれほど重要ではありません。



最終的に、pythonが遅いという事実はもはや重要ではありません。 言語の速度(またはプロセッサ時間)はほとんど問題になりません。 グーグルは彼の研究でこれを説明し 。 ところで、そこでは、高性能システムの開発について言われています。 結論として、彼らは次の結論に達します。
高性能アプリケーションでインタープリター型プログラミング言語を使用するという決定は逆説的かもしれませんが、CPUが制限要因になることはめったにないという事実に直面しています。 言語の表現力は、ほとんどのプログラムが小さく、ほとんどの時間をI / Oに費やし、独自のコードに費やさないことを意味します。 さらに、解釈された実装の柔軟性は、言語レベルでの実験の単純さ、および多くのマシンで計算を分散する方法を探求する機会を提供するのに役立ちました。


言い換えれば:

CPUが抑止力になることはめったにありません。




それでもCPUに遭遇した場合はどうなりますか?



そのような議論についてはどうでしょうか:「これで問題ありませんが、CPUがボトルネックになり、パフォーマンスに影響が出始めたらどうなりますか?」または「言語xはyよりハードウェアへの要求が少ない」 また、あるべき場所もありますが、アプリケーションを無限に水平方向にスケーリングできます。 サーバーを追加するだけで、サービスはより高速に動作します:)疑いもなく、Pythonは同じCよりもハードウェアを要求しますが、新しいサーバーのコストは時間のコストよりもはるかに少なくなります。 つまり、毎回何かを最適化しようと急ぐよりも、リソースを購入する方が安くなります。







Pythonは高速ですか?



記事全体を通して、私は最も重要なことは開発者の時間だと主張しました。 したがって、疑問は残ります:開発中のPython Xは高速ですか? おもしろいですが、私、 Google 、そして 他の何人かは、Pythonの生産性を確認できます。 彼はあなたから非常に多くのものを隠し、あなたの主な仕事に集中するのを助け、あらゆる種類の小さなものに気を取られないようにします。 人生の例をいくつか見てみましょう。



ほとんどの場合、Pythonのパフォーマンスに関するすべての論争は、動的型付けと静的型付けの比較に滑り込みます。 静的に型付けされた言語は生産性が低いことに誰もが同意すると思いますが、念のため、理由を説明する良い記事があります。 Python自体については、異なる言語の文字列を処理するコードを書くのにかかった時間を調べた良い研究報告があります。









上記の研究では、PythonはJavaよりも2倍以上生産的です。 他の多くのプログラミング言語でも同様の結果が得られます。 Rosetta Codeは、プログラミング言語の学習違いについてかなり広範な調査を実施しました。 この記事では、Pythonを他の解釈された言語と状態と比較しています:
一般に、Pythonは関数型言語と比較しても最も簡潔です(平均で1.2〜1.6倍短くなります)。


どうやら、通常、Python実装のコード行は他のどの言語よりも少なくなります。 これはひどい測定基準のように思えるかもしれませんが、上記の調査を含むいくつかの研究は 、コードの各行に費やされる時間が各言語でほぼ同じであることを示しています。 したがって、コードの行数が少ないほど、生産性が向上します。 コーディングホラー自体(C#プログラマー)でさえ、Pythonの生産性がより高いことを示す記事を書きました



Pythonは他の多くのプログラミング言語よりも生産性が高いと言ってもいいと思います。 これは、主に「バッテリー」が付属していることと、あらゆる場面で多くのサードパーティライブラリを使用していることによるものです。 PythonとXを比較した短い記事を次に示します。信じられない場合は、このプログラミング言語がどれほどシンプルで便利かをご自身でお確かめください。 最初のプログラムは次のとおりです。



import __hello__
      
      





, ?



, . . , - endpoint, . . :



  1. endpoint,
  2. ,


- . « ». , , 35 25 . « ».



, , , , . , .



, . :
, - , . — .


, . , . , , . « » — - . . , , :
— .
, :
, , 97% : — . 3%.


, , . :) , , 3% , . , .



, , < . , > - . , Big-O, . 2 . , . , O(log n), , . . — ; .



Big-O O(n), n — - . , — . <. . , X Y, > , «» , .







Python



Python, , . , Python, . , , , , Python . C, , C, . .



, , Python .



Cython, Python. C. Python Cython, C. C . Cython, , . , , EVE Online. MMoRPG Python Cython , , . , . , PyPy — JIT Python, (, -), CPython ( ) PyPy.







, :





!



All Articles