Мы разрабатываем сетевое приложение на основе C/S, мы обнаруживаем, что слишком много блокировок, добавляющих к std:: map, что производительность сервера стала плохой.
Интересно, можно ли реализовать карту без блокировки, если да, как? Есть ли там открытый исходный код?
EDIT: Фактически мы используем std:: map для хранения информации о сокетах, мы сделали инкапсуляцию на основе описания файла сокета, чтобы включить в него другую необходимую информацию, такую как ip-адрес, порт, тип сокета, tcp или udp и т.д.
Чтобы обобщить, мы имеем глобальную карту, говорящую, что это
map<int fileDescriptor, socketInfor*> SocketsMap,
то каждый поток, который используется для отправки данных, должен получить доступ к SocketsMap, и им нужно добавить mutex перед чтением из SocketsMap или записи в SocketsMap, поэтому уровень concurrency для всего приложения будет значительно уменьшен из-за того, что многие блокирует добавление к SocketsMap.
Чтобы избежать проблемы уровня concurrency, у нас есть два решения: 1. храните каждый socketInfor * отдельно. 2. используйте какую-то незафиксированную карту.
Я хотел бы найти какую-то незафиксированную карту, потому что изменения кода, требуемые этим решением, намного меньше, чем решение 1.