2017-03-13 9 views
0

私はPythonのGILを理解しようとしています。私は最近、複数の入力ファイルで異なる時間複雑度の異なるアルゴリズムを使用して実行された特定のタスクの実行時間を比較しなければならない課題を持っていました。同じようにPythonスクリプトを実行しましたが、MacOSで別々のターミナルウィンドウを使用して、異なる入力ファイルに対して同じPythonスクリプトを実行しました。GILは別の端末ウィンドウでPythonスクリプトの並列処理に影響しますか?

入力ファイルごとに、1つの端末ウィンドウですべてを1つずつ順番に実行しました。このためのCPU時間は、各プログラムが2倍の時間を要したが、一度にすべて実行された複数のウィンドウでの以前のアプローチと比較して、実行ごとに低くなっていました。 (注:以前のアプローチでは4つのターミナルウィンドウがあり、pythonスクリプトはmacOS上でclangでコンパイルされたa.out実行ファイルのみを実行し、異なるファイルに出力を保存していました)。

誰もが並列で実行すると、各プログラムの実行速度が遅くなる理由を説明できますか?彼らは別々のコアで動作しましたか、GILは各ターミナルウィンドウで一度に1つずつ実行するよりも遅くなっていましたか?

+0

プログラムがディスクにアクセスしているのですか、それとも他の人が共有していますか? – Scovetta

+0

プログラムはstdinから数値を入力し、3文字列をstdoutに出力します。どちらも、< and >を使用してファイルにリダイレクトした後、プログラムごとに異なるファイル名を付けました。 a.outはメイン以外の1つの関数を持つ単なるソートプログラムなので、彼らは何も共有していないと思います。 –

答えて

1

各端末ウィンドウは新しいPythonインタプリタを起動します。それぞれの独自のGILがあります。この違いは、おそらく、OSレベル(ディスクI/O、メモリ、CPUサイクル)でのリソースの競合によるものです。

+0

各スクリプトはpopen()を使用してa.outを実行し、出力を別のテキストファイルにリダイレクトします。だからGILではないし、他に何が分かれるのか分からない。たぶんCPUサイクル。 –

+0

マルチコアCPUと磁気ディスクを使用している場合は、おそらくI/O競合ですが、確かにGIL以外のものです – cco

関連する問題