PythonとPerlソリューションをWide Finderチャレンジと比較する


8

O’Rourke's Perl solutionLundh's Python solutionに比較すると非常に感謝します。私はPerlが何が起こっているのか分かりません。具体的には、Perlのバージョン3xの利点を教えてください:アルゴリズムの優位性、C拡張の品質、その他の要因

Wide Finder: Results

5

のPerlは重く、テキスト処理のために最適化されています。正確な違いは何かを言うのは難しいほど多くの要因があります。テキストは内部的に完全に異なって表現されます(utf-8とutf-16/utf-32)。正規表現エンジンも全く異なっています。 Pythonの正規表現エンジンはカスタムのものであり、perlのようにあまり使われていません。基本的に「言語の中核」であるPerlとは対照的に、開発者はそれに取り組んでいる開発者がほとんどありません(私はほとんどそれが維持されていないと思います)。

すべてのPerlはです。テキスト処理言語です。

+1

サンプルログは私の知る限りASCIIですが、PythonバージョンではUnicode変換なしのバイト文字列が使用されています。だから、ここには「utf-8対utf-16」はないと思います。 23 9月. 082008-09-23 22:33:36

+1

私はconstantinに同意します。私はユニコードがそれと関係があるとは思わない。 23 9月. 082008-09-23 22:42:23


10

より良いregexの実装は、話の一部です。しかし、なぜperlの実装がより良くスケーリングされるのか説明できません。その差は、より多くのプロセッサで大きくなります。何らかの理由で、Pythonの実装に問題があります。


1

Perlの実装では、mmapシステムコールが使用されます。その呼び出しは、プログラムへのメモリまたはバッファの通常のセグメントと見えるプロセスへのポインタを確立します。ファイルの内容をメモリー領域にマップします。これは、通常のファイルIO(読み取り)と比較してパフォーマンスが向上します.1つは、データにアクセスするために必要なユーザー空間ライブラリ呼び出しがないことです。もう1つは、コピー操作が必要でないことです。カーネルとユーザー空間)。

Perlの文字列と正規表現は8ビットのバイトベースです(例:Javaではutf16と同じです)。したがって、Perlのネイティブ '文字型'はmmappedファイルの同じエンコードです。

正規表現エンジンがmmapにバックアップされた変数を操作すると、PerlのIO関数やlibcのIO関数を経由せずに、mampedメモリ領域を介して直接ファイルデータにアクセスします。

mmapは通常のPython IOライブラリを使用したPythonバージョンとのパフォーマンスの違いに大きく関与している可能性があります。これは、改行を探すオーバーヘッドを追加します。

また、Perlプログラムでは、処理を並列化するための-Jがサポートされています。この場合、oepen " - |"親のファイルハンドルが子のstdoutにあるfork()を引き起こします。子プロセスは結果をstdoutにシリアル化し、親プロセスは非直列化して結果を調整し、要約します。

+1

Pythonバージョンもmmapを使用しています。また、Pythonの正規表現はmmapで直接動作します。 25 9月. 082008-09-25 20:47:41


0

Perl実装では、mmapシステムコールが使用されます。

これです。バッファのコピーを避け、非同期I/Oを提供します。

+1

Pythonバージョンもmmapベースです。しかし、 "mmapはPerlバージョンのための非同期I/Oを提供しています"について詳しく説明できますか? 02 12月. 092009-12-02 12:47:01


3

多くのコアエンジン(MCE)がPerl用にリリースされました。 8人の作業者(コールド・キャッシュ)を使ってディスクから直接読み取る場合でも、MCEはこれでかなりうまくいきます。 wf_mmapと比較してください。 MCEは、入力データを読み取るときに銀行の待ち行列モデルに従います。画像フォルダの下のスライドを探します。

ソースコードはPerlのドキュメントは、MCEとワイドファインダの実装は例/ tbray/

https://metacpan.org/source/MARIOROY/MCE-1.514/examples/tbray/

の下に設けられているhttps://metacpan.org/module/MCE

で読み取ることができるhttp://code.google.com/p/many-core-engine-perl/

でホストされています

MCEをお楽しみください。

Script....: baseline1 baseline2 wf_mce1 wf_mce2 wf_mce3 wf_mmap 
Cold cache:  1.674  1.370 1.252 1.182 1.174 3.056 
Warm cache:  1.236  0.923 0.277 0.106 0.098 0.092