シェルスクリプトと高レベルの解釈ラング(C#/java/など)のパフォーマンス比較
-
11-10-2019 - |
質問
第一に - これは「より良い、無知な非イオン戦争スレッド」であることを意図したものではありません...むしろ、私は一般的に、上司に提案するために建築の決定 /議論を行うために助けが必要です。
詳細をスキップする - 私は単に、シェルvsのパフォーマンス比較を行った人の結果を知りたいだけです[C#やJavaなどの汎用プログラミング言語(解釈)を挿入してください...
驚くべきことに、私はこのデータを見つけられないようにここで検索するためにGoogleでしばらく時間を費やしました。さまざまなユースケースで、これらの比較を行ったことがあります。さまざまなタイプのSQL(Oracle Pref)を実行するXYX#のようなデータベースをヒットします。 、そしてその性質のもの?
特に - 現時点では、シェルスクリプトvsからOracle DBをヒットすることと比較する必要があります。C#(繰り返しますが、解釈されたGPPLは問題ありません。しかし、標準のプログラミングの計算 /指示 /などについても知る必要があります...
あなたが尋ねる前に、なぜ自分で簡単なテストを書くだけではないのですか?答えは、私は私の人生/キャリア全体でWindows開発者であり、シェルスクリプトの知識が非常に限られています - 言うまでもなく *nix全体.... したがって、より経験豊富な人たちからここで質問をすることは、私たちがそのように近くの締め切りのクランチに近づいているので、時間を節約することは言うまでもなく、グレールヤシは有益です;)。
解決
昔々、あなたがたは偉大なコンピューター言語銃撃戦にいくつかのシェルスクリプトが含まれていました。
だから、礼儀 インターネットアーカイブ、 2004年から -
ノート シェルスクリプトには、多くのテストのプログラムがありませんでした。
Score Missing-Tests
Java 20 1
Perl 16 0
Python 16 0
gawk 12 6
mawk 10 6
bash 7 12
ノート シェルスクリプトは、時には小さくて高速になる可能性があります:-)
CPU (sec) Mem (KB) Lines Code
bash 0.0670 1464 1
C gcc 0.0810 4064 59
Python 0.3869 13160 6
他のヒント
スクリプトが何をしているかに大きく依存しています。私は、書かれていないシェルスクリプトが1つ、2つさえ2つの桁を作ることで盛り上げたのを見てきました 単純 変更。
通常、シェルスクリプトは、通常CまたはC ++をコンパイルするユーティリティを実行する接着ロジックです。その場合、物事をスピードアップするためにできることはあまりないかもしれません。編集されている不十分に書かれたユーティリティによってうなり声が行われている場合、それは非常に速く無駄な努力をしているだけです。
とはいえ、PythonまたはPerlはシェルスクリプトよりもはるかに高速になりますが、VMまたはネイティブコードはまだ高速になります。
詳細を伝えることはできないため、特定のヘルプを提供することはできません。
比較のための簡単なデモを見たい場合は、私の の純粋なバッシュの実装 hexdump
そしてそれを本物と比較してください:
$ time ./bash-hexdump /bin/bash > /dev/null
real 7m17.577s
user 7m2.570s
sys 0m14.745s
$ time hexdump -C /bin/bash > /dev/null
real 0m2.459s
user 0m2.260s
sys 0m0.176s
Bashバージョンが遅い主な理由の1つは、nullバイトを処理するために必要な文字ごとにファイル文字を読み取ることです(シェルはバイナリデータの取り扱いにはあまり良くありません)が、主な理由は実行速度です。これが例です 私が見つけたPythonスクリプト:
$ time ./hexdump.py /bin/bash > /dev/null
real 0m11.694s
user 0m11.605s
sys 0m0.040s
私は単に、パフォーマンスの比較を行った人の結果を知り、見つけたいと思っています...
このような比較の執行の教訓は、特定の詳細が重要であるということです。
タスクの特定の詳細だけでなく、(これをプログラマーとして知っているべきではない)シェルスクリプトの書き込み方法の特定の詳細。
それで、あなたはそのシェル言語を理解し、そのシェルスクリプトが効率的な方法で書かれていることを確認できる人を見つけることができますか? (2行を変更して40分から5分にかかった場合は、いいことではないでしょうか。)
これには「シェル」(別名sh/bash/ksh/powerscript)言語は含まれていませんが、「言語[実装]パフォーマンス」の比較的大きなリストです。いずれにせよ、誰かがそれを楽しむかもしれません。
コードを作成しており、処理速度について懸念がある場合は、アセンブリに直接コンパイルされるか、最新のVM用にコンパイルされたコードを作成する必要があります。
しかし...ムーアの法律が18か月ごとに処理能力をキックアップしているので、私は疑問に思います:パフォーマンス要件は本当に必要ですか?解釈されたコードでさえ、ほとんどの最新のシステムで非常に速く実行され、時間とともに良くなるだけです。コンパイルされたコードがあなたに与える速度の改善が本当に必要ですか?
答えがノーの場合は、あなたを幸せにするものは何でも書いてください。
上記のように、シェルからSQLクエリを実行することはできません。 VMで実行される言語は、VMファクターのために少し前に時間がかかりますが、それ以外の場合は差は無視できます。
質問が本当に40分から5分に減ることである場合、私はほとんどの時間をかけている作品を見つけようとします。クエリが最も長い間実行されている場合、言語を切り替えることはあまり役に立ちません。
繰り返しますが(質問の詳細はあまりありません)、システムのさまざまなコンポーネントを調べて、ボトルネックがどのコンポーネントであるかを確認することから始めます。
私のシステムでこの非常に簡単なベンチマークを行っただけで、結果は予想通りです。
各ステップですべての整数を1〜50,000と50,000と出力の回答を合計します
BASH:3秒C:0.5秒