从多个线程请求连接到远程服务

Connecting to remote services from multiple threaded requests

本文关键字:连接 远程服务 请求 线程      更新时间:2023-10-16

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

非常感谢!

由于memcached有同步协议,在得到prevous的答案之前,您不应该编写下一个请求。所以,并没有其他线程可以在同一个memcached连接中聊天。如果你在"阻塞"模式下使用它,我更喜欢使线程本地连接。

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

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