エピソード
ヒント 2: CPU バインドされた作業と IO バインドされた作業を区別する
**非同期ヒント #**2: CPU バインドの作業 (スレッドプールで実行する必要があります) と IO バインドの作業 (不要) を区別することが重要です。
この講演のスライドは、ルシアンのブログからダウンロードできます。
私は古いAndroid開発ブログの投稿を読んだことを覚えています。 それは言った: "1. 応答性の高いアプリケーションを作成する場合は、メイン UI スレッドで最小限の作業が行われるようにすることをお勧めします。 2. アプリケーションがハングする可能性のある長いタスクは、別のスレッドで処理する必要があります。 3. このようなタスクの一般的な例は、予期しない遅延を伴うネットワーク操作です。
このロジックには重大な欠陥があります... プログラムがちょうどそこに座っていて、その親指を振り返り、ネットワークパケットが戻ってくるのを待っているとき、 それは何の作業もしていないので、バックグラウンドスレッドで行く必要はありません。代わりにそれを待つ必要があります。
Await は、まったく新しいプログラミングの世界を開きます。 ほとんどの場合、バックグラウンド スレッドなしで取得できます。 つまり、すべてのコードを UI スレッドで実行できるため、 データ バインドの実行や UI の更新などがはるかに 簡単になります。
Await を使用すると、サーバーの応答性も向上します。 これは、スレッドプールが立ち上がるまでに時間がかかるためです。 await を使用する場合は、すぐに起動できます。
では、いつスレッドプールを使用する必要がありますか? 回答: 大規模なデータセットに対するコンピューティング バインドイテレーションなど、CPU にバインドされた作業がある場合のみ。Parallel.ForEach または Task.Run を使用して実行します。
**非同期ヒント #**2: CPU バインドの作業 (スレッドプールで実行する必要があります) と IO バインドの作業 (不要) を区別することが重要です。
この講演のスライドは、ルシアンのブログからダウンロードできます。
私は古いAndroid開発ブログの投稿を読んだことを覚えています。 それは言った: "1. 応答性の高いアプリケーションを作成する場合は、メイン UI スレッドで最小限の作業が行われるようにすることをお勧めします。 2. アプリケーションがハングする可能性のある長いタスクは、別のスレッドで処理する必要があります。 3. このようなタスクの一般的な例は、予期しない遅延を伴うネットワーク操作です。
このロジックには重大な欠陥があります... プログラムがちょうどそこに座っていて、その親指を振り返り、ネットワークパケットが戻ってくるのを待っているとき、 それは何の作業もしていないので、バックグラウンドスレッドで行く必要はありません。代わりにそれを待つ必要があります。
Await は、まったく新しいプログラミングの世界を開きます。 ほとんどの場合、バックグラウンド スレッドなしで取得できます。 つまり、すべてのコードを UI スレッドで実行できるため、 データ バインドの実行や UI の更新などがはるかに 簡単になります。
Await を使用すると、サーバーの応答性も向上します。 これは、スレッドプールが立ち上がるまでに時間がかかるためです。 await を使用する場合は、すぐに起動できます。
では、いつスレッドプールを使用する必要がありますか? 回答: 大規模なデータセットに対するコンピューティング バインドイテレーションなど、CPU にバインドされた作業がある場合のみ。Parallel.ForEach または Task.Run を使用して実行します。
ご意見およびご提案がある場合は、 こちらから問題を送信してください。