非同期モデルとデバッグの問題
5367 ワード
ひどうきモデル
AというモジュールがBモジュールにどのようなサービスを要求するかを考えてみましょう.同期プログラミング構造では、Aは、B処理および応答要求を選択的に待つ必要がある.一方,非同期プログラミング構造では,AはBがサービス処理を完了するのを待つことなく,要求するだけで直ちに他の操作を実行し,応答イベントが発生したときに応答を処理する.次のグラフは分かりやすいです.
長所
非同期方式の利点は、類似の要求を多くのBモジュールに関連付ける必要がある場合、これは非常に明らかである.図に示すように、同期方式は、各要求が応答を完了した後に次の要求を処理し、非同期方式は、要求を全員に連続的に送信した後に応答を待つため、処理速度が速い.
短所
非同期実行ストリームを得るためには、AおよびBは自然に異なるスレッドによって処理されなければならない.したがって、問題が発生した場合、プロセスに沿ってデバッグすることはできません.このストリームは静的ではないため,実際に実行せず,コードのみを見て問題を探す方式は同期方式に比べてかなり困難である.
デバッグの問題
次に、非同期プログラミング構造で作成した2つのエラーモジュールのPseudoeコードを示します.
非同期方式の利点は、類似の要求を多くのBモジュールに関連付ける必要がある場合、これは非常に明らかである.図に示すように、同期方式は、各要求が応答を完了した後に次の要求を処理し、非同期方式は、要求を全員に連続的に送信した後に応答を待つため、処理速度が速い.
短所
非同期実行ストリームを得るためには、AおよびBは自然に異なるスレッドによって処理されなければならない.したがって、問題が発生した場合、プロセスに沿ってデバッグすることはできません.このストリームは静的ではないため,実際に実行せず,コードのみを見て問題を探す方式は同期方式に比べてかなり困難である.
デバッグの問題
次に、非同期プログラミング構造で作成した2つのエラーモジュールのPseudoeコードを示します.
次に、非同期プログラミング構造で作成した2つのエラーモジュールのPseudoeコードを示します.
送信コード
loop {
Message command = commandQueue.pop(); // 1
channel.write(command); // 2
SyncObject syncObj = new SyncObject(); // 3
syncMap.put(command.id, syncObj) // 4
syncObj.wait(2000) // 5
}
受信コード
loop {
Message response= responseQueue.pop(); // 1
syncObj = syncMap.get(response.id); // 2
if (syncObj != null) { // 3
syncObj.signal(); // 4
syncMap.remove(response.id); // 5
}
pipeline.next(response); // 6
}
※問題の提示はコードの位置と順序に関係しています.たとえば、受信コードで送信コードの作業を完了するか、送信コードのコード順序をこのように変更する必要があります.モジュールの背景は次のとおりです.Reference
この問題について(非同期モデルとデバッグの問題), 我々は、より多くの情報をここで見つけました https://velog.io/@joosing/aync-model-debugingテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol