はじめまして。CPUのコア数に関する質問です。
例えば、ある一つのサーバにCPUが2個、1CPUあたり6コアのスペックとします。
毎時定刻に、一つのバッチ処理が起動します。
そのバッチ処理は、多数のCSVファイルを入力として、チェック後、DBへ必要情報を更新します。
CSVファイルがめちゃめちゃ多い(数万件)ため、できる限り早く処理を実行したいと考えてます。
バッチ処理のアプリケーションは、シングルタスクです。
こうした条件のもと、OSは自動的に12コアのメリットを生かすようにジョブをコアに割り当てて
くれるものでしょうか?
私の周りには、技術者もどきが多く、いろんな意見があります。
ある人は、アプリを多重化したつくりにしないと、いくらコアがあっても一つの処理に使われるコアは一つだけという人と、アプリは意識しなくともOSが自動的にコアに割り当ててくれるという意見の人もいます。
本当のところどうなんでしょうか?
専門家のご意見をいただきたくお願いします。
No.1ベストアンサー
- 回答日時:
バッチ処理は、「シングルタスク」で「シングルスレッド」です。
なので、結論から言えばコア1つの処理になります。
【マルチタスクとは】
複数のアプリケーションを同時に実行する処理の事です。
その際、シングルコアだと並列して処理するアプリケーションが順にスケジューリングされ、順番に処理されていきます。
なので、複数のアプリケーションが同時に実行出来ます。
※シングルタスクでは他のアプリが終了するまで、次のアプリは処理待ちになる。
また、マルチコアの場合はそれぞれのスケジューリングが複数のコアにスケジューリングされるので、コア数が増えれば処理速度が早くなる。
コア数が増えた場合、個々のアプリの速度は変わらないが複数のアプリを同時に実行した場合に早くなる。
例えば、シングルコアで4つのアプリを起動した場合に、シングルスレッドではそのアプリが終了するまで他のアプリは待ち状態となり、終わったら次へと処理されて行く。
マルチスレッドでは、4つのアプリがそれぞれプロセス単位でスケジューリングされ少しずつ順番にプロセスが処理されていきあたかも同時に実行しているかのように処理されて行く。
また、2コアだったとすると、4つのアプリのプロセスが2つのコアに分散されてスケジューリングされるので、1コアで2つのアプリが処理される。
【マルチスレッドとは】
一つのアプリケーションが複数のスレッドを作成し、複数のコアで同時に処理させる事です。
その為、コア数が増えればアプリ自体の速度がアップします。
なので、あくまでも仮にですが、バッチ処理が「シングルタスク」「マルチスレッド」だった場合、12コアを使用して高速に処理されます。
>アプリを多重化したつくりにしないと、いくらコアがあっても一つの処理に使われるコアは一つだけという人
これが、マルチスレッドの事です。
>アプリは意識しなくともOSが自動的にコアに割り当ててくれるという意見の人
これが、恐らくマルチタスクの事を言ってるのだと思います。
但し、複数同時にアプリを起動した場合に他の処理待ちにならないだけで、複数のコアに処理を振り分けてくれるわけではありません。
あくまでも、一つのアプリが使用するのは一つのコアです。
「シングルタスク」「シングルスレッド」の定義までご説明いただきありがとうございます。
結局今のアプリの作りでは、コアが多い恩恵が無いということですね。
これでモヤモヤしてものが取れました。感謝いたします。
No.2
- 回答日時:
> アプリは意識しなくともOSが自動的にコアに割り当ててくれる
↑同時に複数のコアにジョブを割り当てるという意味においては幻想です。OSが使用するコアを決定するという意味においては正解です。
一般的にシングルタスク・シングルスレッドモデルのプログラムでは、アプリケーションプログラムの処理そのものが同時に複数のコアへ割り付けられることはありません。(コア間を移動したりすることはありますが、あくまでも移動であって同時複数使用ではありません)
よって、複数コアを同時に使える可能性を持ったプログラムモデル=マルチスレッドモデルやマルチタスク(マルチプロセス)モデルを採用したプログラムでなければなりません。
結局今のアプリの作りでは、コアが多い恩恵が無いということですね。
最初の回答者様と同じ意味の回答でより一層納得できました。
これでモヤモヤしてものが取れました。感謝いたします。
No.3
- 回答日時:
>バッチ処理のアプリケーションは、シングルタスクです。
ということであれば、1プログラムでは1コアしか使いませんので、12コアを使うためには12多重でプログラムを動かす必要があります。
たとえばデータを12分割してそれぞれ並行に実行させるなど。
DBMSが同じシステムで動いているのであれば、DBMSもコアを使いますので、その分のコア数を引く必要があります。
>(1) アプリを多重化したつくりにしないと、いくらコアがあっても一つの処理に使われるコアは一つだけ
>(2) アプリは意識しなくともOSが自動的にコアに割り当ててくれる
言語によっては処理を自動的に多重化してくれる言語もあります。この場合は、プログラマが多重化を意識する必要はありませんが、言語の多重化の仕組みを効率よく使うためには、言語の多重化の仕組みを知った上でプログラミングする必要があります。その言語を使いさえすれば必ず多重化されるという物でもないです。
「アプリ」というものを「OSの上で動くプログラム」と捉えれば、(1)は正しくて(2)は間違いです。
「アプリ」というものを「プログラマが書くコード」と捉えれば、上に書いた通り言語によっては(2)が正しくなるケースもあります。
回答ありがとうございます。総じていえば、No1,2の回答とズレていないと受け取りました。さらに、一歩奥の世界までご説明頂きありがとうございます。とても参考になりました。感謝いたします。
No.4
- 回答日時:
バッチ処理自体はシングルコアで実行されるが、DBのプロセスとは(おそらく)別コアで実行される、です。
バッチ処理がプログラムの中でフォークする仕組みでない限りは複数コアを使って演算してくれたりはしないと思います。もちろん、バッチ処理がスクリプト言語などで書かれており、その内部処理でフォークなどがプログラマに見えないところで実行されているのであれば、その限りではありません。ちなみに、現代のCPUはスーパースケーラといって、1コア内にも複数の演算ユニットがあり、CPU自身がが命令レベルの並列性を見出したインストラクションについては可能な限り空いている演算ユニットに命令を詰め込んで処理を高速化しています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
CPUのコアが一部しか使われない
CPU・メモリ・マザーボード
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
I/Oとは?
-
コマンドプロンプトが重い
-
これは何ですか?igfxext.exe
-
パラメーターが間違っています...
-
svchost.exeによるPCのフリーズ
-
メモリの「コミット済み」の意...
-
プロファイルエラーについて
-
FORMが開いているかどうかの確...
-
\\Device\\Harddisk1\\DR1 でコ...
-
メモリが"written"になることは...
-
PCを起動すると画面が真っ黒で...
-
起動中のアプリ、ソフトの取得
-
win11 添付図(USBメモリーが取...
-
backing storeって何ですか?
-
windows起動中に、突然強制終了...
-
パソコンのデータをネットにつ...
-
再セットアップの所要時間
-
WinAPIのGetLocalTimeの分解能は?
-
Javaで環境変数を動的に変更す...
-
会計ソフトJDL macで使いたい W...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトが重い
-
これは何ですか?igfxext.exe
-
CPUコアの使われ方についてご教...
-
パラメーターが間違っています...
-
I/Oとは?
-
メッセージキューのスレッド間...
-
igfxTray.exeの常駐を止めたい。
-
ディスクアクセスしているアプ...
-
CPU温度保護によるブルースクリ...
-
PCの重い原因と「svchost.exe」...
-
自分自身のプロセスID
-
HDDへアクセスしているプロセス...
-
ubuntuにタスクマネージャー的...
-
プロセスのスリム化を図りたい
-
アクセスが拒否されるプロセス
-
linuxマルチコアCPU環境におい...
-
topのPR列とNI列の違い
-
rbmonitor.exeがタスクマネージ...
-
仕事で使うパソコンが遅い!!...
-
CPU使用率
おすすめ情報