2016-07-18 8 views
2

私は、Webサーバー用の静的ファイルのコピーを保持するファイルキャッシュサーバーを作成しています。 Webサーバー内のスレッドが静的ファイルを必要とするときはいつでも、キャッシュサーバーへのソケット接続を開き、socket.share()の結果+必要なファイルの名前を送信します。キャッシュサーバーは、socket.shareの結果を使用してsocket.fromshare経由でhttpクライアントにアクセスし、静的ファイルの内容を送信します。次に、httpクライアントソケットのコピーとそれに対するスレッドの接続を閉じます。socket.fromshareでソケットファイルハンドルを再利用することはできますか?

socket.closeの代わりにsocket.detachを使用すると、自動的にパフォーマンスが向上するのでしょうか?

実際には、基礎となるファイルディスクリプタを閉じずに閉じた状態にソケットオブジェクトを置く:socket.detachのドキュメントは、これは言います。ファイル記述子が返され、他の目的で再利用できます。

私は新しいソケットがキャッシュサーバによって作成されたときに明示的に何らかの形で返されたファイル記述子を使用する必要がありますか、またはsocketモジュールは、既存の再利用可能なファイルディスクリプタについて知っていますか?

答えて

0

socket.detachは、PySocketSockObject構造体のファイル記述子フィールドのみを消去します。モジュールの残りの部分がファイル記述子が再利用可能であることを知ることができるように、値を格納しません。

0

私はよく分からない理由:

  1. あなたはそれがパフォーマンスを向上させるだろうと思うsocket.share
  2. を使用しています。

あなたは既にスレッドしていると言います。 WebサーバーがIOバウンドになる予定です。あなたの時間のほとんどが費やされる:(?!メモリ甘い、速い)

  • をディスク上の情報を見つけ、クライアントとサーバー
  • 間のTCP/IP接続を交渉
  • ディスクからの読み取り(メモリ? )とあなたが改善を行うに取り掛かる前に、あなたはあなたのコードをプロファイリングする必要がありソケット

に書き込みます。実際の保留は何ですか?接続する?ディスクから読む?クライアントに返信しますか?

大幅な改善が行われていない限り、実際のTCP/IPネゴシエーションは、ディスクから情報を取得するよりも、わずか数桁です。

関連する問題