我在考虑如何以某种方式使用 C++ 制作一个多线程聊天服务器,以最大限度地减少线程争用。
在我最初的设计中,我std::vector
在服务器中有一个套接字。当客户端连接到服务器时,套接字被添加到这个套接字向量中。
还有一个std::unordered_map<string, Socket*>
允许查找用户名的相应套接字。当客户端使用它的用户名和密码登录时,我们会在哈希映射中添加一个条目。当用户注销时,我们删除哈希图中的相应条目。
客户端将发送以用户名为地址的消息。当他们到达服务器时,我们使用哈希映射来查找套接字,并通过该套接字发送消息。
由于服务器是多线程的,并且提到的数据结构可以从不同的线程读取/写入,我们现在需要使用一些线程同步机制来保护它们,例如互斥锁。但我认为这样做会因为线程争用而降低性能。基本上,所有线程都需要访问这些数据结构才能发送消息,但只有其中一个线程可以同时使用它们。我认为使用这种方法的性能不会比使用单线程更好。
如何改进我的设计以获得更好的性能?