1

私は、ローカル ネットワーク上の特定のノードの位置/アドレス情報のために DNS のようなサービスを必要とするおもちゃ/実験に取り組んでいます。また、ノード タイプ、ソケット タイプ (enet-udp または tcp)、その他の特定のデータ ビットなど、その他の情報も格納されます。数値型のほとんど (またはおそらくすべて)。各エントリはクライアント ID によって特定のクライアントに関連付けられ、各クライアントはノード内に独自のスレッドを持ちます。

私の質問は、どのブースト パッケージが数値 ID による絶対最速のアクセスを提供するかということです。実現することは決してないかもしれませんが、複数のノードにまたがるスレッド内で数千のクライアントの IPC を管理し、サービスが未知の数に成長する可能性があるという考えです。

言い換えれば、コンテナーは高速で拡張可能でなければなりません。成長する能力がアクセス時間の急激なコストにつながる場合は、サイズを設定するコンテナーが望ましいですが、可変サイズが理想的です。挿入時間は重要ではなく、コンテナの内部構造内のデータの順序を維持することも重要ではありません。

このタイプのコンテナ/構造のブーストは間違った場所ですか? Boost や一般的な C++ の構造について、非常にうるさくならざるを得なかったのはこれが初めてなので、何か新しいことを学べることを楽しみにしています。

ありがとう

4

1 に答える 1

2

まず、このルックアップが実際にアプリケーションのボトルネックの 1 つになることを確認してください (I/O を実行している場合、内部ルックアップはおそらく無関係です)。

数値 ID に上限 (最大値) を設定でき、絶対最速で成長しないことに満足している場合は、事前に予約されたベクターになります。

それ以外の場合、最も可能性の高い候補はハッシュになります ( unordered_mapC++11 またはブーストから)。ハッシュには一定時間のルックアップがありますが、負荷係数とそれがいつ大きくなるかに注意してください。

于 2013-07-13T00:27:16.180 に答える