ネットワークアプリケーションベースのC/Sを開発していますが、std :: mapに追加するロックが多すぎて、サーバーのパフォーマンスが低下していることがわかりました。
ロックフリーマップを実装できるかどうか疑問に思います。実装できる場合は、どのように実行しますか?そこにオープンソースコードはありますか?
編集:実際には、std :: mapを使用してソケット情報を格納し、ソケットファイルの説明に基づいてカプセル化を行い、IPアドレス、ポート、ソケットタイプ、tcpまたはudpなどの他の必要な情報を含めました。
要約すると、私たちはそれが
map<int fileDescriptor, socketInfor*> SocketsMap,
次に、データの送信に使用されるすべてのスレッドがSocketsMapにアクセスする必要があり、SocketsMapから読み取る前またはSocketsMapに書き込む前にミューテックスを追加する必要があります。したがって、SocketsMapに追加されるロックが非常に多いため、アプリケーション全体の同時実行レベルが大幅に低下します。
同時実行レベルの問題を回避するために、2つの解決策があります。1。各socketInfor*を個別に保存します。2。ある種のロックフリーマップを使用します。
このソリューションに必要なコードの変更はソリューション1の変更よりもはるかに少ないため、ある種のロックフリーマップを見つけたいと思います。