1. 序章

このチュートリアルでは、非同期プログラミングとマルチスレッドプログラミングの簡単な説明を示します。 次に、それらの違いについて説明します。

2. 非同期プログラミングとは何ですか?

非同期モデルでは、複数のことが同時に発生する可能性があります。 プログラムが長時間実行関数を呼び出すと、実行フローがブロックされず、プログラムは実行を継続します。 関数が終了すると、プログラムは結果を認識してアクセスします(必要な場合)。

ネットワーク経由で2つのファイルをフェッチし、それらを組み合わせるプログラムの例を見てみましょう。

非同期システムでは、解決策は追加の制御スレッドを開始することです。 最初のスレッドは最初のファイルをフェッチし、2番目のスレッドは最初のスレッドが終了するのを待たずに2番目のファイルをフェッチします。次に、両方のスレッドが結果が返されるのを待ちます。その後、再同期して結果を結合します。

シングルスレッドアプローチのもう1つの例は、OSにファイルを要求し、数学演算を実行する必要があるプログラムです。

非同期システムでは、プログラムはOSにファイルを要求し、ファイルを待機している間、CPUで実行される数学演算に制御を戻します。

非同期プログラミングへの1つのアプローチは、遅いアクションを実行し、追加の引数を取る関数、コールバック関数を作成することです。 アクションが開始され、アクションが終了すると、結果とともにコールバック関数が呼び出されます。

3. マルチスレッドプログラミングとは何ですか?

マルチスレッドは、命令の複数のシーケンシャルセット(スレッド)の同時/並列実行を指します。

シングルプロセッサでは、マルチスレッドは並列で実行されているように見せかけます。 実際には、プロセッサはスケジューリングアルゴリズムを使用して切り替えています。 または、外部入力(割り込み)の組み合わせとスレッドの優先順位に基づいて切り替えます。

複数のプロセッサコアでは、スレッドは真に並列です。 個々のマイクロプロセッサが連携して、より効率的に結果を達成します。 同時に発生する複数の並列同時タスクがあります。

マルチスレッドの基本的な例は、Webブラウザの2つの異なるタブから2つのファイルをダウンロードすることです。各タブは新しいスレッドを使用して、要求されたファイルをダウンロードします。 他のタブが終了するのを待つタブはありません。同時にダウンロードしています。

次の図は、マルチスレッドアプリケーションの同時実行の簡単な説明を示しています。

4. 非同期vsマルチスレッド

提供した定義から、次のことがわかります。 マルチスレッドプログラミングとは、さまざまな機能を同時に実行することです。 非同期プログラミングは、関数間のノンブロッキング実行に関するものです 、およびシングルスレッドまたはマルチスレッドプログラミングで非同期を適用できます。

したがって、マルチスレッドは非同期プログラミングの1つの形式です。

簡単な例えを見てみましょう。 あなたには友達がいて、一緒に夕食を作ることにしました。

非同期とは、友達に「店に行ってパスタを買うことです。 戻ってきたら教えてください一緒に夕食を作ってください。 その間に、ソースと飲み物を用意します。」

スレッディングは、「あなたは水を沸騰させます。 トマトソースを温めます。 水が沸騰している間に、私に聞いてください。パスタを入れます。 ソースが熱くなったら、チーズを加えることができます。 両方が終わったら、私は座って夕食を出します。 それから私たちは食べます。」 スレッドの例えでは、「When、Do」イベントのシーケンスを見ることができます。これは、各人(スレッド)ごとの一連の命令を表します。

そのアナロジーから、マルチスレッドはワーカーに関するものであり、非同期はタスクに関するものであると結論付けることができます。

5. どちらを使用しますか?

2つのプログラミングモデルのどちらを選択するかは、主にパフォーマンスに依存します。

同期/非同期とシングル/マルチスレッドの間のすべての可能な組み合わせを考えると、どちらのモデルがより良いパフォーマンスを発揮する必要がありますか?

一言で言えば、多くのI / O操作とさまざまな計算を伴う大規模なアプリケーションでは、非同期マルチスレッドプログラミングフローを使用して、計算リソースを利用し、非ブロッキング関数を処理します。これは任意のOSのプログラミングモデル!

より多くの力で、より多くの責任が来ます! したがって、このモデルを実装することにした場合は、競合状態、デッドロック、共有リソース、コールバックイベントなどのさまざまな問題に対処する必要があります。

6. 結論

この記事では、非同期プログラミングとマルチスレッドプログラミングの定義を示し、次にそれらの違いを確認しました。

この記事のすべての用語と概念はテクノロジーに依存しないことに注意してください。