gpt4 book ai didi

c++ - 如何编写连接池?

转载 作者:IT老高 更新时间:2023-10-28 21:45:44 29 4
gpt4 key购买 nike

是否存在用于实现连接池的已知算法?如果不是,已知的算法是什么,它们的权衡是什么?
设计和编程连接池时常见的设计模式有哪些?
有没有使用 boost.asio 实现连接池的代码示例?
使用连接池进行持久连接(不是 http)是个好主意吗?
线程与连接池有什么关系?什么时候需要新线程?

最佳答案

如果您正在寻找纯线程池策略(可能是连接或任何资源),有两种简单的方法,即:-

  1. 半同步/半异步模型(通常使用消息队列传递信息)。

  2. Leaders/Followers 模型(通常使用请求队列来传递信息)。

第一种方法是这样的:-

  • 您创建一个线程池以处理资源。通常这个尺寸(线程数)需要是可配置。调用这些线程' worker '。
  • 然后您创建一个主线程将工作分派(dispatch)给Worker 线程。应用程序将 task 作为向主线程发送消息
  • 主线程将相同的所选 Worker 的消息 Q线程和 Worker 线程从水池。选择和删除Worker 线程需要同步。
  • worker 完成后任务,它返回到线程池。

主线程本身可以以FCFS优先化 的方式使用它获得的任务。这将取决于您的实现。

第二个模型(领导者/追随者)是这样的:-

  • 创建线程池。最初所有是 worker 。然后选出一个Leader,自动休息,全部成为追随者。注意选Leader 必须同步。
  • 将所有要处理的数据放在一个单个请求 Q
  • 线程池 Leader 出队任务。然后它立即选出新的领导者并开始执行任务。
  • 新的领导人接下一个任务。

可能还有其他方法,但上面列出的方法很简单,适用于大多数用例。

半同步/半异步主要弱点:-

  • 更高的上下文切换,同步和数据复制开销。

领导者/追随者的主要弱点:-

  • 实现复杂性Leader在线程池中选举。

现在您可以自己决定更正确的方法。高温,

关于c++ - 如何编写连接池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2790969/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com