2011-06-13 13 views
1

オブジェクトプールの場合、クライアントがリソースを要求するたびにプールから与えられます。 1つのリソースをチェックアウトしてその状態を変更してチェックインした場合、次のリクエストで何が起きますか?プールはクライアントがこのリソースをチェックアウトできるようにしますか?オブジェクトプールの設計パターンの問題

答えて

1

プールに解放されたオブジェクトが再利用で無効になった場合、そのプールは多少意味がありません。クラスが初期化または再初期化を必要とする場合は、get()またはrelease()プールメソッドで行うことができます。再初期化に単純な割り当て(例えば、5分間再使用してはならないソケットオブジェクトのプールなど)が必要な場合は、プールを効果的に2つに分割する専用のプールマネージャスレッドに頼らざるを得なくなるかもしれません水たまり - 再利用可能なオブジェクトと再初期化を待っているオブジェクト。

RGDS、 マーティン

0

あるいは、リソースが元の状態になるまで交互に、あなたが戻ってプールにリソースを返すべきではありません。たとえば、リスナー・スレッドと10個のワーカー・スレッドのプールを持つWebサーバーがあるとします。リスナー・スレッドは、着信するHTTP要求を受け入れ、処理のためにワーカー・スレッドにディスパッチします。プール内の(チェックアウトされていない)ワーカースレッドは、それらの「元の」状態、すなわちアイドル状態、または要求を処理していない状態にある。リスナー・スレッドがワーカー・スレッドをチェックアウトし、HTTP要求を与えると、ワーカー・スレッドは要求の処理を開始します。言い換えれば、その状態は「働いています」。要求の処理が完了し、クライアントにhttp応答を送信すると、再び「アイドル」になり、プールに戻ります。これにより、プールから現在チェックアウトされていないすべてのスレッドは、常に元の状態である "アイドル"になります。