Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> Linuxの同期/非同期とブロック/非ブロックの違い

Linuxの同期/非同期とブロック/非ブロックの違い

  

今日説明する概念は、同期/非同期とブロック/非ブロックの違いですこれら2つの概念は、すべてIO処理を伴うため混乱を招きます。まず第一に、同期と非同期の概念を説明するために、これら2つの概念はメッセージの通知メカニズムに関連していますたとえば、私が銀行に出張して業務を処理する場合、順番に待つか、どちらかを選択できます。私の電話番号は小さい番号になっています私の電話番号に到達すると、カウンターの人が私の番であることを知らせます(前者)はメッセージを待つ同期であり、後者(他人が通知するのを待つ)は非同期です。メッセージを待つ:非同期メッセージ処理では、ウェイター(この場合、ビジネスを待つ人)は、待機イベントがトリガーされたときにトリガーメカニズム(ここではカウンターパーソン)によってトリガーされるコールバックメカニズムを登録することがよくあります。実際のプログラムでは、同期メッセージ処理は単純な読み取り/書き込み操作のようなもので、この2つを待つ必要があります。操作は成功し、非同期処理メカニズムはselect /pollに似た多重IO操作で、目的のメッセージがトリガーされると、メッセージトリガーメカニズムはメッセージ処理のトリガーを通知します。この2つの概念は、プログラムがメッセージを待機するときの状態に関連しています(同期または非同期のどちらであっても)上記の例を続けます。メッセージの外で他のことをすることはできません、そしてメカニズムがブロックされます、それはプログラムで明らかにされます、すなわち、プログラムは関数呼び出しでブロックされ、実行を続けることができません。私が待っている間にテキストメッセージを呼び出して送信すると、彼(ウェイター)はこのメッセージ通知をブロックせず、自分のことをしながら待機するため、この状態はブロックされない状態になります。同期的なノンブロッキング形式は実際には効率が悪いので、呼び出している最下位のチームを調べて確認する必要があるとします。呼び出しの場所と監視キューをプログラムの2つの操作として考える場合、プログラムはこれら2つの異なる動作を切り替える必要があり、効率は低いと考えられます。非同期のノンブロッキング形式ではそのような問題はありません。呼び出しはあなたの(ウェイター)なものであり、通知はカウンター(メッセージトリガーメカニズム)であるため、プログラムは2つの異なる操作を行ったり来たりしません。同期とブロッキングを混同する人もいます。同期はブロッキングの形式で表現されることが多いためです。ブロッキングの読み取り/書き込み操作を書く人が多いのですが、fdにO_NONBLOCKフラグを設定するのを忘れないでください。同期操作は非ブロッキングにすることができます;同様に、select関数を使用する場合など、select操作を使用する場合など、非同期操作は一般に実際のIO操作でブロックされないため、非同期操作と非ブロッキング操作も混同します。それはあなたの番号がリストされている時のようなものです、それは通常あなたの前に誰もいないので、あなたがカウンターに行くときあなたはブロックされません。 /非同期とブロック/非ブロックは、2つの異なる概念です。それらは共存し結合することができます。こちらも参照できます。http://www.ibm.com/developerworks/cn/linux/l-async/昨夜終了しました記事の後、今朝のフィードバックを見て、同時に何度か読みましたが、説明が十分ではない箇所がまだいくつかあることがわかりましたが、ここで補足説明を続けていきます。前述のように、同期と非同期は、メッセージを処理するためのメカニズムではなく、対象となるメッセージが通知される方法のメカニズムにすぎず、同期の場合、メッセージがトリガーされるのを待つためにメッセージ所有者によって処理されます。非同期の場合は、トリガーメカニズムを使用してメッセージハンドラに通知するため、非同期メカニズムでは、プロセスメッセージ送信側とトリガーメカニズムの間に接続のブリッジが必要になります。 select /pollのようなIO多重化メカニズムではfdであり、メッセージがトリガーされると、トリガーメカニズムはfdからfdまでを処理するための処理関数を見つけますメッセージの通知とメッセージの処理という2つの概念を理解してください。この問題を解決するための鍵は、上の例に戻ることですビジネスを処理するのはあなたの番ですこれはあなたが気にするメッセージであり、ビジネスを処理するのはこのメッセージを処理することです。対象のメッセージがfdが読み書き可能かどうかである場合、メッセージの処理はfdを読み書きすることであり、同期/非同期はメッセージの通知方法にのみ注意を払い、メッセージの処理方法を気にすることはありません。多くの人が同期とブロックを混同していますが、これらの2つの概念には違いはありません。書き込み操作では、メッセージ通知と処理メッセージが実際に組み合わされますここで重要なメッセージはfdが読み書き可能かどうか、そして処理メッセージはfdに読み書きされるかです。ブロックする場合、メッセージの通知を待つために読み取り/書き込み操作はブロックされず、fdが読み取り/書き込み可能でない場合、操作はすぐに戻り、多くの人に尋ねると、非同期操作はブロックされません。実際には、非同期操作はブロックすることができますが、通常はメッセージを処理するときにはブロックされませんが、メッセージがトリガーされるのを待っているときにはブロックされます。最後のタイムアウトパラメータがNULLで、目的のイベントが発生しない場合、プログラムはselect呼び出しでブロックしますaio_ *グループ操作など、非同期の非ブロックが使用されている場合は、aio_readを開始します。操作が行われると、すぐに関数が戻ってブロックされることはありません関心のあるイベントがトリガされると、以前に登録されたコールバック関数が処理のために呼び出されます詳細は上記の関連記事を参照してください。銀行での営業を待っている人がメッセージがトリガーされるのを待つために非同期の方法を使用している場合、つまりちょっとしたメモを取るために、この間銀行から他のことができない場合は明らかにその男は待っていた操作でブロックされました;しかし、その男は突然自分自身がタバコを吸っているのに気づき、タバコを吸うために外出する必要があったので、彼はロビーに言いましたこの番号に問題がある場合は、外部に通知(コールバック関数を登録)しても、この待機操作でブロックされることはありません。当然、これは非同期+ノンブロッキングです。
zh-CN"],null,[1],zh-TW"]]]

Copyright © Windowsの知識 All Rights Reserved