
はじめまして。CPUのコア数に関する質問です。
例えば、ある一つのサーバにCPUが2個、1CPUあたり6コアのスペックとします。
毎時定刻に、一つのバッチ処理が起動します。
そのバッチ処理は、多数のCSVファイルを入力として、チェック後、DBへ必要情報を更新します。
CSVファイルがめちゃめちゃ多い(数万件)ため、できる限り早く処理を実行したいと考えてます。
バッチ処理のアプリケーションは、シングルタスクです。
こうした条件のもと、OSは自動的に12コアのメリットを生かすようにジョブをコアに割り当てて
くれるものでしょうか?
私の周りには、技術者もどきが多く、いろんな意見があります。
ある人は、アプリを多重化したつくりにしないと、いくらコアがあっても一つの処理に使われるコアは一つだけという人と、アプリは意識しなくともOSが自動的にコアに割り当ててくれるという意見の人もいます。
本当のところどうなんでしょうか?
専門家のご意見をいただきたくお願いします。
No.1ベストアンサー
- 回答日時:
バッチ処理は、「シングルタスク」で「シングルスレッド」です。
なので、結論から言えばコア1つの処理になります。
【マルチタスクとは】
複数のアプリケーションを同時に実行する処理の事です。
その際、シングルコアだと並列して処理するアプリケーションが順にスケジューリングされ、順番に処理されていきます。
なので、複数のアプリケーションが同時に実行出来ます。
※シングルタスクでは他のアプリが終了するまで、次のアプリは処理待ちになる。
また、マルチコアの場合はそれぞれのスケジューリングが複数のコアにスケジューリングされるので、コア数が増えれば処理速度が早くなる。
コア数が増えた場合、個々のアプリの速度は変わらないが複数のアプリを同時に実行した場合に早くなる。
例えば、シングルコアで4つのアプリを起動した場合に、シングルスレッドではそのアプリが終了するまで他のアプリは待ち状態となり、終わったら次へと処理されて行く。
マルチスレッドでは、4つのアプリがそれぞれプロセス単位でスケジューリングされ少しずつ順番にプロセスが処理されていきあたかも同時に実行しているかのように処理されて行く。
また、2コアだったとすると、4つのアプリのプロセスが2つのコアに分散されてスケジューリングされるので、1コアで2つのアプリが処理される。
【マルチスレッドとは】
一つのアプリケーションが複数のスレッドを作成し、複数のコアで同時に処理させる事です。
その為、コア数が増えればアプリ自体の速度がアップします。
なので、あくまでも仮にですが、バッチ処理が「シングルタスク」「マルチスレッド」だった場合、12コアを使用して高速に処理されます。
>アプリを多重化したつくりにしないと、いくらコアがあっても一つの処理に使われるコアは一つだけという人
これが、マルチスレッドの事です。
>アプリは意識しなくともOSが自動的にコアに割り当ててくれるという意見の人
これが、恐らくマルチタスクの事を言ってるのだと思います。
但し、複数同時にアプリを起動した場合に他の処理待ちにならないだけで、複数のコアに処理を振り分けてくれるわけではありません。
あくまでも、一つのアプリが使用するのは一つのコアです。
「シングルタスク」「シングルスレッド」の定義までご説明いただきありがとうございます。
結局今のアプリの作りでは、コアが多い恩恵が無いということですね。
これでモヤモヤしてものが取れました。感謝いたします。
No.4
- 回答日時:
バッチ処理自体はシングルコアで実行されるが、DBのプロセスとは(おそらく)別コアで実行される、です。
バッチ処理がプログラムの中でフォークする仕組みでない限りは複数コアを使って演算してくれたりはしないと思います。もちろん、バッチ処理がスクリプト言語などで書かれており、その内部処理でフォークなどがプログラマに見えないところで実行されているのであれば、その限りではありません。ちなみに、現代のCPUはスーパースケーラといって、1コア内にも複数の演算ユニットがあり、CPU自身がが命令レベルの並列性を見出したインストラクションについては可能な限り空いている演算ユニットに命令を詰め込んで処理を高速化しています。
No.3
- 回答日時:
>バッチ処理のアプリケーションは、シングルタスクです。
ということであれば、1プログラムでは1コアしか使いませんので、12コアを使うためには12多重でプログラムを動かす必要があります。
たとえばデータを12分割してそれぞれ並行に実行させるなど。
DBMSが同じシステムで動いているのであれば、DBMSもコアを使いますので、その分のコア数を引く必要があります。
>(1) アプリを多重化したつくりにしないと、いくらコアがあっても一つの処理に使われるコアは一つだけ
>(2) アプリは意識しなくともOSが自動的にコアに割り当ててくれる
言語によっては処理を自動的に多重化してくれる言語もあります。この場合は、プログラマが多重化を意識する必要はありませんが、言語の多重化の仕組みを効率よく使うためには、言語の多重化の仕組みを知った上でプログラミングする必要があります。その言語を使いさえすれば必ず多重化されるという物でもないです。
「アプリ」というものを「OSの上で動くプログラム」と捉えれば、(1)は正しくて(2)は間違いです。
「アプリ」というものを「プログラマが書くコード」と捉えれば、上に書いた通り言語によっては(2)が正しくなるケースもあります。
回答ありがとうございます。総じていえば、No1,2の回答とズレていないと受け取りました。さらに、一歩奥の世界までご説明頂きありがとうございます。とても参考になりました。感謝いたします。
No.2
- 回答日時:
> アプリは意識しなくともOSが自動的にコアに割り当ててくれる
↑同時に複数のコアにジョブを割り当てるという意味においては幻想です。OSが使用するコアを決定するという意味においては正解です。
一般的にシングルタスク・シングルスレッドモデルのプログラムでは、アプリケーションプログラムの処理そのものが同時に複数のコアへ割り付けられることはありません。(コア間を移動したりすることはありますが、あくまでも移動であって同時複数使用ではありません)
よって、複数コアを同時に使える可能性を持ったプログラムモデル=マルチスレッドモデルやマルチタスク(マルチプロセス)モデルを採用したプログラムでなければなりません。
結局今のアプリの作りでは、コアが多い恩恵が無いということですね。
最初の回答者様と同じ意味の回答でより一層納得できました。
これでモヤモヤしてものが取れました。感謝いたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CPU・メモリ・マザーボード PコアとEコアの使い分け 3 2023/07/30 22:09
- CPU・メモリ・マザーボード Chromeブック 1 2022/08/13 15:38
- iPhone(アイフォーン) スマホの節電モードについて cpu高速処理コアと効率コア節電モードオンにすると効率コアだけ使われるん 1 2023/08/05 22:51
- CPU・メモリ・マザーボード パソコンのCPU1コア性能が低くで発熱少ないコアをGPUみたいにめっちゃ多く搭載したら少ないコアで1 5 2023/07/18 00:56
- CPU・メモリ・マザーボード cpu 4 2023/02/17 19:54
- CPU・メモリ・マザーボード BTOパソコンの購入を考えている者 5 2022/04/02 21:53
- CPU・メモリ・マザーボード 安価ノートPC検討で教えてください 7 2022/05/02 09:25
- ノートパソコン Windows11を最小要件満たさずにアップグレードってできますか? 8 2022/07/17 14:19
- CPU・メモリ・マザーボード CSGOの最低FPSを上げたいのですが 1 2022/09/10 17:53
- BTOパソコン PCの選び方 6 2022/09/11 00:16
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Explorer.exeがCPUを独占し...
-
これは何ですか?igfxext.exe
-
explorer.exeとdrwtsn32.exeの...
-
パソコン CPUの使用率
-
プロセス、サービスについて
-
PCの動作が徐々に重くなるのですが
-
win7でアイコンクリックで動作...
-
CPU使用率100% なにもできない
-
タスクマネージャでCPU使用率が...
-
ほとんどアプリケーションを動...
-
iCalでグーグルタスク的な使い方
-
マルチコア上のLinux環境にて、...
-
Preemptive Multitasking
-
タスクマネージャーにあるexe....
-
Windows のタスクマネージャー...
-
CPUの使用率について教えて下さい
-
iexplorer.exeーアプリケーシ...
-
PCの重い原因と「svchost.exe」...
-
タスクマネージャーにあるもの...
-
メモリの「コミット済み」の意...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトが重い
-
パラメーターが間違っています...
-
CPUコアの使われ方についてご教...
-
自分自身のプロセスID
-
μITRONのスタック見積もりについて
-
これは何ですか?igfxext.exe
-
「構成システムを初期化できま...
-
何もしてないのにCPU使用率100%
-
アクセスが拒否されるプロセス
-
CPU使用率下げる方法
-
CPU使用率高い-該当プロセスなし
-
ubuntuにタスクマネージャー的...
-
PCの重い原因と「svchost.exe」...
-
OSで、、、、、、セマフォと...
-
PCを、放っておくといきなりhel...
-
Windows7起動時に「ヘルプとサ...
-
CPU使用率を上げる方法をご存じ...
-
CPU使用率が100%プロセス「...
-
リアルタイムOS
-
ディスクアクセスしているアプ...
おすすめ情報