スレッド処理は、早いのか?

当社に於ける経験と経験から考えた推論です。

同時並行処理又は、並列処理の事をスレッド処理と称しています。


まず、結論を言います。


スレッド処理は、MFCのC++や、GCCで使用すると早い。

C#やVBやJavaの場合は、遅い。

と言う結論に達しました。


C#での経験だと、確実に処理に時間がかかってしまいます。体感できるレベルで遅くなります。なので、できるだけスレッド処理は、しない方が良いと言う結論に達します。


何故、MFC C++とC#とで全く逆の結果になるのかについて、仮説ですが、考えてみました。


ネイティブな言語であるのが、MFC C++やGCCです。完全にコンパイルされた状態で実行されるプログラムです。

他方、C#やVBやJavaは、中間言語にコンパイルされて、実行時に完全にコンパイルしながらプログラムを動作させるプログラムです。

この違いがCPUに掛かる負荷の違いに大きく影響しているのです。


さて、スレッド処理をMFC C++で実行させた場合、何故、早くなるのか?

一個のCPUに掛かる負荷が小さくなるからだと考えております。

同時にではなくて、CPUを猛烈なスピードで入れ替えて使っているのがスレッド処理です。その為、一個のCPUに掛かる負荷が半分になり、その分CPUの過熱量が低減すると考えられます。

つまり、発熱が原因で、処理速度が低下しているのだと言う仮説に達しました。

では、C#やVBやJavaは、どうなのか?

C#やVBやJavaの場合は、中間言語の状態で、配布されていますので、実行時に毎回コンパイルしながら処理を行っています。実行させるだけで、CPUに大きな負荷がかかってしまうのです。

大きな負荷がかかった状態だと、CPUの温度が大きく上昇します。その上で、さらに、猛烈なスピードでCPUを切り替えて使用すると言うスレッド処理を行うと、スレッド処理を行う為の処理の負荷でCPUが余計に過熱してしまうのではなかろうかと言う仮説に達しました。


CPUの処理速度の低下は、一定の温度を境にして著しく低下すると考えられるのです。


スレッド処理を行う為のCPUの切り替え処理を命令しているCPUが別のCPUを使っているとしても、一個のMPUの中に搭載されているCPUを使用している為、MPU全体の温度が上昇すると思われるので、この様な結果になると考えられるのです。


当社は、ハードウェアは専門外ですので検証もできませんし、テストでCPUを作ってみることもできません。全て、仮説です。


しかし、MFC C++でのスレッド処理は、体感できるレベルで処理速度が向上したと言う事実をご報告いたします。

以上の経験から、

MFC C++やGCCの様なネイティブなプログラミング言語を使用した場合は、スレッド処理を出来るだけ使用すべきだという結論に達しました事をご報告いたします。


この様な結果から、一個のCPUの使用率を高くすると処理速度が著しく低下するのだと言う事も仮説ですが、推定できると考えられます。


突然ですが、CPUクーラーは、水冷が良いと言う結論です。←理論上です。まだ、水冷式クーラーをCPUに付けた経験が有りません。

今、水冷式クーラーに変更しようかと考慮中です。


自作機には、簡単に付けられそうです。でも、HPのFSタイプのPCだと、無理ですね。

ファン部を外に出してしまえば使えますけど、そんなにまでして無理して使う必要性がなさそうです。

C#やVBやJavaでスレッド使わなければ良いだけですし。


以上、スレッド処理は、早いか?でした。




閲覧数:2回0件のコメント

最新記事

すべて表示