質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

1150閲覧

C#のasync awaitはマルチコアじゃないと使う意味はないのですか?

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2017/10/23 07:47

c#のasync awaitを使って非同期にタスクを複数処理したいのですが、動作させるハードウエアのCPUがマルチコアまたはハイパースレッディングの理論マルチコアじゃないと同時にタスクを処理できないのでしょうか?

例えば非同期で同時に4つタスクが立ち上がるとした場合、CPUの物理コア+理論コアが4つ以上じゃないと同時にタスクを処理しないという感じですか?
それとも1CPUでも同時にタスクを処理しているかのように処理してくれるのでしょうか?

開発環境
Visual Studio 2015
C#6.0

動作環境
windows servwer 2012 R2
.NET Framework 4.6
CPU Xeon E5-2650 (1Core 1Thread)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

PUは仕事をしないけれど時間はかかるというタスクはありまして、その代表がネットワークからのレスポンス待ちですよね。ハードディスクからのレスポンス待ちも同様です。ユーザーの入力を待つのも実は同類で、これらI/O待ちはシングルコアでもasync/awaitが活きる局面です。

投稿2017/10/23 08:31

yuba

総合スコア5568

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/10/23 08:47

ありがとうございます。 入力系もasyncで待っている感じなんですね。
maisumakun

2017/10/23 09:08

JavaScriptは言語仕様上シングルスレッドですが、そういった「I/O待ち」や「タイマ待ち」、「イベント待ち」のためにasync-awaitが存在しています。
退会済みユーザー

退会済みユーザー

2017/10/23 13:50

ありがとうございます。
yuba

2017/10/24 03:38

ユーザー入力待ちにまで実際にasync使っているかというとまず使いませんごめんなさい。いろいろある待ち時間もだいたいI/O待ちにまとまるんですと書こうとしただけでした。 ユーザー入力待ちにasync使うのももちろんできるのですが普通そうしないのは、おそらくユーザーの入力を待つという処理だけは非同期処理が流行り出すずっと前からあったのですでに道具が十分揃っているから、ということになると思います。 とはいえ、遷移しながら進むウィザード画面のようなのをasync/awaitで書いたらこれはこれで面白いかなとも思いました。
guest

0

ベストアンサー

async, awaitのような複数スレッドでの並列処理はプロセッサが複数の場合に性能的な威力を発揮するのは確かですが、本質的にはハードウェア上にプロセッサが複数あるかどうかとは独立した機構だと自分は思います。どちらかというと「どの部分が非同期でどの部分が同期的に実行されるか」についてプログラミングしやすいような機能として設計されている点が本質で、並列して実行され得るコード部分が「本当に並列して処理されるか」「時分割で疑似的に並列的に処理されるか」はそれぞれの実行環境でのハードウェアの能力次第で決まるようになっていると思います。

それとも1CPUでも同時にタスクを処理しているかのように処理してくれるのでしょうか?

そう思います。1CPUしかない場合、並列して動作可能な部分はOSの中のスケジューラーが適宜プロセッサーを割り振りながら疑似的に並列処理される仕組みになっていると考えてよいと思います。


ちなみに汎用コンピューター用のハードウェア構成とかには詳しくないですがプロセッサー一つのみというのが有り得るのか疑問に感じました。もし1Coreだったとするとプロセッサーは2つと思います。また1Coreじゃなく1プロセッサーだと仮定しても1Threadという条件付きのプロセッサやWindows Serverの構成があるのでしょうか?現在の普通の汎用コンピューターはシングルプロセッサ・シングルスレッドの機器構成・OSは一般的でない気がしました。
違ってたらスミマセン。

投稿2017/10/23 08:11

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/10/23 08:16

ありがとうございます。 やはり1CPUでも同時にタスクを処理してくれるのですね。 ちなみにVPSのwindowsサーバーなので仮想1Coreという感じです。 説明不足で申し訳ございませんでした。
KSwordOfHaste

2017/10/23 08:24 編集

そういうことでしたか。気づけませんでした。失礼しました。 ただVPS環境といってもゲストOS(という言い方が正しいかどうか曖昧ですが...)が1スレッド限定ということはないと思います。それではWindows自体が動かないのでは?OS起動すると普通にサービスがいっぱい動きますし。それらは複数のプロセス・複数のスレッドで動くと思います。
退会済みユーザー

退会済みユーザー

2017/10/23 08:46

すみません、スレッドはたしかにそうでしたね・・・。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問