web-dev-qa-db-ja.com

多くの場合、クラウドコンピューティングプラットフォームのデフォルトは1つのCPUです。これは、並列プログラミングを使用すべきではないという意味ですか?

私が見つけることができるほとんどすべてのクラウドインスタンスは、デフォルトで1 CPUです。現在、これは1つのCPUしかないのですが、将来的には増加すると予想されますか?

この設計はコード設計に影響を与えるので、Task Parallel Libraryなどのテクノロジーを除外しますか?

クラウドプラットフォームでのマルチスレッドコードの長期スケーラビリティに影響を与えるため、これはProgrammers.SEのトピックです。

5

クラウドコンピューティングは、URLからリソースを提供するなど、デフォルトで途方もなく並列の問題を処理します。コアの数に関係なく、並列処理を実現するにはいくつかの方法があります。あなたはそれをどのように利用するつもりかを知っているあなたのアプリケーションを構築するべきです。複数のコアと大量のRAMを備えたクラウドインスタンスを取得できますが、コストが高くなります。

ほとんどのWebサービスは、組み込みのWebサーバー内で実行されます(Spring Boot Webサービスなど)。必要な並列処理はサーバーによって処理されるため、競合のポイントを追加しない限り、サービスは途方もなく並列のままであり、スレッドについてまったく考える必要はありません。

とはいえ、1つのサービスで同時に処理できるクライアントの数は非常に多くなります。そのため、クラウドソリューションは通常、別のインスタンスをオンラインにして、サービスのインスタンス間でトラフィックを分散します。多くの場合、複数のコアを持つ1つのインスタンスを持つよりも、トラフィックの短いバーストのために別のインスタンスを持つ方がはるかに安価です。

表示されていないのは、サービスが通常複数のコアを持つサーバーでホストされているということですが、それはlooksだけに似ています。 Webサービスの複数のコピーを実行している場合、複数のコアも使用しています。

並列処理であるという点はそこにあります、それを台無しにしない方法を知る必要があるだけです。そのためには、並列処理の仕組みなどを理解する必要があります。

タスクパラレルライブラリについて説明しましたが、これは、特にasyncおよびawaitと組み合わせると、MicrosoftのWebサービスに対するアプローチの主要な機能です。これがどのように機能するかを理解することは、アプリケーションがより多くの同時ユーザーを処理するのに本当に役立ちます。よく過ごす時間です。

2
Berin Loritsch

いいえ、実際にすべきです。私は言うまでも行きます-誰もがすべきです。

並列プログラミングは、実際には業界全体にとって大きな問題であり、大学、チュートリアル、プロジェクトマネージャー、および建築家は、通常、遠ざかっています。これは悪く、非常に悪く、できるだけ早く修正する必要があります。

並列プログラミングは実際にはそれほど難しくありませんが、ほとんどの人が慣れていない別の考え方が必要です。まともなマルチスレッドアプリは、すべての関数呼び出しがリエントラントであり、共有オブジェクトが保護されるべきであるというルールを知って遵守するだけで作成できます。これはほとんどの問題を解決します。

しかし、それに慣れるには問題があります。ドキュメントは常にスレッド対応ではないか、スレッドについて明示的に述べていません。単体テストのようなパンとバターのセーフティネットは、並列プログラミングで惨めに失敗します。スレッドの結合と異常終了/キャンセルは大きな問題です。そして、人々が過度に創造的になり始めるとすぐに、デッドロックは恐ろしいことの1つです。

この余分な複雑さは、ほとんどの人が余分なスレッドを忘れるだけで十分です。私も以前はそうでしたが、今でもスレッドを「忘れる」ことがあります。これは、クラウドプロバイダーがマルチコアを忘れて、ベースハードウェアでより多くのVMを実行するための完璧な方法でもあります。

しかし、これは間違っています。コンピューティング能力の向上は現在スレッドにあり、プログラマーとして私たちは新しい世界に慣れる必要があり、可能な限りスレッドを使用するように努めるべきです。

7
Coder

確かに、使用する予定の実行環境を計画する必要があります。

私が使用しているクラウドプラットフォームでは、複数のCPUを備えたVMを定義できます。明示的な並列処理が重要な場合は、別のベンダーを選択してください。

5
ddyer

これは確かに同時実行性の見通しを妨げますが、シングルコアで実行されているシングルスレッドプログラムが複数のスレッドから利益を得ることができる場合があります。

このプログラムが一連の同様のタスクを実行するとします。それぞれがCの計算時間とWの待機時間を含み、シングルコアを完全に利用するには、W/Cスレッドが必要です。

これらの定義を前提とした一般式は次のとおりです。

Ncpu = CPUの数

Ucpu =ターゲットCPU使用率。 0 <= Ucpu <= 1

W/C =待機時間と計算時間の比率

CPUを適切な使用率に保つための最適なスレッド数は次のとおりです。

Nthreads = Ncpu * Ucpu *(W/C)

つまり、使用可能なCPUよりも実行可能なスレッドが多い場合、複数のスレッドはパフォーマンスを向上させません(のみ)。

2
Cardinal