ホームページ  >  記事  >  バックエンド開発  >  Python の同期、非同期、ブロッキング、ノンブロッキングとは何ですか?

Python の同期、非同期、ブロッキング、ノンブロッキングとは何ですか?

王林
王林転載
2023-04-24 09:37:071413ブラウズ

    1. ステータスの紹介

    他の概念を理解する前に、まずプロセスのいくつかの状態を理解する必要があります。プログラムの実行中、オペレーティング システムのスケジューリング アルゴリズムの制御により、プログラムは準備完了、実行中、ブロックされたいくつかの状態になります。

    • Ready (準備完了) 状態: プロセスに CPU 以外の必要なリソースがすべて割り当てられている場合、プロセッサを獲得すればすぐに実行できます。このときのプロセスの状態準備完了状態と呼ばれます。

    • 実行/実行中(Running)状態 プロセスがプロセッサを獲得し、そのプロセッサ上でプログラムが実行されているとき、このときのプロセスの状態を実行状態と呼びます。

    • ブロック状態で実行中のプロセスがイベントの発生を待っているために実行できない場合、プロセッサは放棄され、ブロック状態になります。プロセスのブロックを引き起こすイベントには、I/O の完了の待機、アプリケーション バッファーの不足、文字 (シグナル) の待機など、さまざまなタイプが考えられます。

    2. 同期と非同期

    いわゆる非同期とは、依存タスクの完了を待つ必要はなく、依存タスクに通知するだけであることを意味します。完了する作業と依存タスクもすぐに実行します。タスク全体を完了する限り、タスクは完了します。依存するタスクが最終的に本当に完了するかどうかについては、依存するタスクが特定できないため、信頼性の低いタスクシーケンスとなります。

    • 最初の方法: 列に並んで待つことを選択します;

    • 2 番目の方法: 少額のチケットを取ることを選択しますそれに注意してください、私は私の番号を持っています、そして私の番号に達すると、カウンターの人が私が業務を処理する番であることを私に知らせます;

    最初のタイプ:前者 (列に並んで待っている) は同期です メッセージ通知を待っています、つまり銀行の営業状況を待つ必要があります;

    2 番目のタイプ: 後者 (他者からの通知を待っている) はメッセージを待つことです非同期で通知します。非同期メッセージ処理では、メッセージ通知を待っている人 (この場合は、ビジネスの処理を待っている人) がコールバック メカニズムを登録することがよくあります。待機しているイベントがトリガーされると、トリガー メカニズム (この場合は、担当者) がコールバック メカニズムを登録します。 counter) は、ある種のコールバック メカニズムを渡します。このメカニズム (この場合は、小さな紙に書かれた数字、ナンバーと呼ばれます) は、イベントを待っている人を見つけます。

    3. ブロッキングと非ブロッキング

    待機プロセス中に通知を待つためにキューに入れているか、番号を使用しているかに関係なく、上記の例を続けます。ウェイター メッセージ通知を待つ以外に何もできない場合は、メカニズムがブロックされており、それがプログラムに反映されます。つまり、プログラムは関数呼び出し時にブロックされており、実行を続行できません。

    逆に、銀行でこれらのサービスを処理している間に電話をかけたり、テキスト メッセージを送信したりすることを好む人もいます。この状態は、彼 (ウェイター) がこのメッセージ通知でブロックされていないため、非ブロックです。 、でも自分のことをしながら待ちましょう。

    注: 同期ノンブロッキング フォームは実際には非効率的です。電話で話しているときに、キューが待機しているかどうかを確認するために顔を上げなければならないことを想像してください。呼び出しを行うこととキューの位置を監視することをプログラムの 2 つの操作とみなす場合、プログラムはこれら 2 つの異なる動作を行ったり来たりする必要があり、これは明らかに非効率ですが、非同期ノンブロッキング形式ではそのような問題は発生しません。なぜなら、電話をかけるのはあなたの仕事 (ウェイター) であり、あなたに通知するのはカウンター (メッセージトリガーメカニズム) の仕事であり、プログラムは 2 つの異なる操作を行ったり来たりすることはないからです。

    4. 同期/非同期およびブロッキング/非ブロッキング

    1. 非同期ブロッキング フォーム

    銀行で業務の処理を待っている人が非同期メソッドを使用して待機している場合、メッセージ トリガーされる (通知される) ということは、少額の紙幣を受け取ることを意味します。この期間中に他の用事をするために銀行を離れることができない場合、この人物がこの待機操作でブロックされていることは明らかです。

    非同期操作はブロックできますが、メッセージの処理中はブロックされませんが、メッセージ通知の待機中にブロックされます。

    2. 同期ノンブロッキング フォーム

    電話をかけているときに、キューが届いているかどうかを確認するために顔を上げなければならないことを想像してください。プログラム内に 2 つの操作がある場合、プログラムはこれら 2 つの異なる動作を行ったり来たりする必要があり、これは非効率であると考えられます。

    3. 非同期のノンブロッキング フォーム

    電話をかけるのはあなた (ウェイター) の仕事であり、あなたに通知するのはカウンター (メッセージ トリガー メカニズム) の仕事であるため、プログラムには何もありません。操作中に 2 つの異なるスイッチを前後に切り替えます。

    たとえば、この人は、自分がタバコ中毒で、外でタバコを吸いに行かなければならないことに突然気づき、ロビーのマネージャーに、自分の番号に達したら外に出て私に知らせてくださいと伝え、その後彼はロビーのマネージャーに電話をかけます。この待機操作でのブロッキングは、当然ながら非同期の非ブロッキング メソッドです。

    以上がPython の同期、非同期、ブロッキング、ノンブロッキングとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。