2016-08-27 2 views
2

私は6世代のIntel i5プロセッサー(4コア、3GHz)と8ギガバイトのRAMを持っています。 0から999999999までのすべての数字を含むテキストファイルを作成する必要があるとしましょう。スレッドの数を検出する方法&私は実行する必要がありますか?

どうすれば速くすることができますか?何本のスレッドを使うべきですか? 4以上か?実行すべきスレッド数とその理由

+2

これはIOバインドされるので、多く。 – tkausl

+0

しかし、彼らは少なくとも少し速くなりますよね? –

+0

おそらく遅くなるでしょう。 – tkausl

答えて

1

同じファイルに書き込んでいるため、テキストが文字化けしないようにするにはロックが必要です。ただし、ロックを使用している場合は、マルチスレッドまたはマルチプロセッシングでは、シーケンシャルに書き込むので違いはありません。ロックを使用しない

は、このような結果は非常になります:

1, 2, 3, 54,, ... 

一つとして、スレッドは、それが自分のだ書きますと、他のスレッドが同時に書き込みます。

1

GILのため、マルチプロセッシングモジュールを使用する必要があります。プロセスの数は:

multiprocessing.cpu_count() - 1 # -1 for other system process. 
+0

これは実際には*推測*ですが、私の推測では、ただ1つのプロセスを使用する方が速くなります。IOバウンドになり、1つのプロセスを使用すると出力ファイルをロックするオーバーヘッドを避けることができます違う。仮定しないで、**テスト**! – Carpetsmoker

+0

@Carpetsmokerの数字は0から999999999の間でリストに保存して、すぐにファイルに書き込むことができます。 –

+0

しかし、それは実際に速いですか?それは別の*推測* ;-) – Carpetsmoker

0

&コメントありがとうございます。私は休暇中で、私のコンピュータは2つのコアを持っているので、マルチプロセッシングモジュールを試すことができませんでした。同じ(システムの場合は1、Pythonの場合は1)です。しかし、家に帰るとすぐに結果をマルチプロセッシングで追加します。だから、私のテスト結果は、Intel Pentium Dual Core 1.80GHzである。

余分なスレッドがなければ、4秒かかった。
1つの余分なスレッドで3秒かかりました。

2番目のスレッドの後は変更されませんでした。 3秒、3分、4分、5分のスレッドで試しました。

ここにコードがあります。申し訳

​​> 1スレッド

http://paste.ubuntu.com/23098229/> 2スレッド

http://paste.ubuntu.com/23098131/> 3スレッド

http://paste.ubuntu.com/23098136/> 4スレッド

http://paste.ubuntu.com/23098139/> 5スレッド

、私はできませんでしたここにコードを貼り付けると、「コードとして正しくフォーマットされていない」と言われました。私は10分(Ctrl + K、4スペース)のように試してみましたが、うまくいきませんでしたので、paste.ubuntu.comに投稿しました。

関連する問題