【问题标题】:Connecting to remote services from multiple threaded requests从多个线程请求连接到远程服务
【发布时间】:2013-07-10 21:02:17
【问题描述】:

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

非常感谢!

【问题讨论】:

    标签: c++ sockets boost boost-asio libmemcached


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 2018-09-17
      • 1970-01-01
      • 2011-06-08
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多