我有一个带有许多线程的提升asio应用程序,类似于Web服务器,处理数百个并发请求。每个请求都需要调用memcached和redis(分别通过libmemcached和redispp)。在这种情况下,最佳做法是从每个线程单独连接到redis和memcached(有效地将服务器上的打开套接字增加三倍,每个请求三个)?或者有没有办法构建一个静态对象,使用单个memcached / redis连接,并允许所有线程共享该单个连接?当涉及到类似这样的线程安全时,我有点困惑,并且线程之间的所有内容都需要异步,但是阻塞每个线程的单独请求(因此每个线程都有线性进展,但是许多线程可以在在任何给定时间,他们自己进步的不同地方)。这有意义吗?
非常感谢!
答案 0 :(得分:0)
由于memcached具有同步协议,因此在回答prevous之前不应该写下一个请求。因此,没有其他线程可以在同一个memcached连接中聊天。如果你在“阻塞”模式下使用它,我宁愿进行线程本地连接。
或者你可以让它以“异步”的方式工作:建立连接池,从中选择一个连接(并锁定它)。请求完成后,将其返回池中。
此外,您可以创建一个请求队列并在特殊线程中处理它(使用多项目和回调)。