ホームページ >バックエンド開発 >Python チュートリアル >同時実行パターン: ボーキング パターン
Balking Design Pattern は、システム内の状態に依存するアクションを管理するために使用される動作設計パターンです。これにより、システムが適切な状態にある場合にのみ操作が実行されることが保証されます。必要な前提条件が満たされない場合、操作は中止されるか、システムが「停止」します。ボーキングとは何かを知らない私のような人のために、グーグルはこれについて次のように述べています:「アイデアや取り組みを受け入れることをためらったり、受け入れたくないこと」。このパターンは、無効なアクションによって競合やエラーが発生する可能性があるマルチスレッド環境またはシステムで特に役立ちます。
コミュニティ内の一部の人々は、ボーキング パターンをデザイン パターンというよりもアンチパターンと見なしています。オブジェクトがその API をサポートできない場合は、問題のある呼び出しが利用できないように API を制限するか、制限なく呼び出しができるようにする必要があります。これは古いパターンで、JVM が遅く、同期が現在ほどよく理解されて実装されていなかったときに発生したと思われます。いずれにしても、議論する価値はあり、使用するかどうかは開発者次第です。
例を挙げてこれらを理解しましょう:
印刷システムはボーキング パターンを示します:
注: はい、キューを使用してこれを処理できますが、今のところ、このようなエレガントなデータ構造が存在することは知らないと仮定しましょう。
import threading import time class Printer: def __init__(self): self.state = "idle" self.lock = threading.Lock() def start_printing(self, job_id): print(f"Attempting to start Print Job {job_id}...") with self.lock: # Ensure thread safety if self.state == "printing": print(f"Balking: Print Job {job_id} cannot start. Printer is busy.") return self.state = "printing" # Simulate the printing process print(f"Print Job {job_id} started.") time.sleep(3) print(f"Print Job {job_id} completed.") with self.lock: self.printing = "idle" # Multiple threads attempting to start print jobs printer = Printer() threads = [ threading.Thread(target=printer.start_printing, args=(1,)), threading.Thread(target=printer.start_printing, args=(2,)) ] for t in threads: t.start() for t in threads: t.join()
コードを見ると、印刷リクエスト start_printing をプリンターに送信し、プリンターがビジー状態の場合、プリンターは現在の状態 self.state をチェックし、状態が「printing」の場合は何もせずに戻ることがわかります。 。それ以外の場合は、そのリクエストを処理し、それに応じて状態を調整します。
Balking デザイン パターンは、状態に依存するアクションを管理し、ソフトウェア システムでの無効な操作を防止する効果的な方法を提供します。明確なガード条件を導入し、スレッドの安全性を確保することで、システムの信頼性と保守性が向上します。タクシー予約システムで複数の乗車を防止する場合でも、同時印刷ジョブを管理する場合でも、Balking パターンは、競合を回避し、運用の整合性を維持するための構造化されたアプローチを提供します。最終的に、Balking パターンを使用するかどうかは、アプリケーションの特定の要件と同時実行のニーズによって決まります。
以上が同時実行パターン: ボーキング パターンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。