0

我有一个带有许多线程的 boost asio 应用程序,类似于 Web 服务器,可以处理数百个并发请求。每个请求都需要调用 memcached 和 redis(分别通过 libmemcached 和 redispp)。在这种情况下,最好的做法是从每个线程分别连接到 redis 和 memcached(有效地将服务器上打开的套接字增加三倍,每个请求三个)?或者有没有办法让我使用单个 memcached/redis 连接构建一个静态对象,并允许所有线程共享该单个连接?当谈到这样的线程安全时,我有点困惑,线程之间的一切都需要异步,但是阻塞每个线程的单独请求(所以每个线程都有一个线性进程,但是在任何给定时间,许多线程都可以在它们自己的进程中位于不同的位置)。那有意义吗?

非常感谢!

4

1 回答 1

0

由于 memcached 具有同步协议,因此您不应在获得对 prevous 的答复之前编写下一个请求。因此,没有其他线程可以在同一个 memcached 连接中聊天。如果您在“阻塞”模式下使用它,我更愿意建立线程本地连接。

或者你可以让它以“异步”的方式工作:建立连接池,从中选择一个连接(并锁定它)。请求完成后,将其返回到池中。

此外,您可以创建一个请求队列并在特殊线程中处理它(使用 multigets 和回调)。

于 2013-07-11T17:56:49.753 回答