【问题标题】:QPID C++ Client Multi-threaded optimizationsQPID C++ 客户端多线程优化
【发布时间】:2012-04-17 09:35:45
【问题描述】:

我正在寻找线程化 C++ Apache QPID 客户端的最佳方法,以便在高消息流量下获得最佳性能。

我们的经纪人将包括 3 个交易所,每个交易所都有 2 个单向队列。 c++ 客户端将推送到的 3 个“上行链路”队列上会有大量流量。

有几个文档稀疏的类用于与 QPID 代理接口。连接、会话、发送者和接收者。连接提供会话,会话提供发送者或接收者。在阅读了各种 QPID 文档后,我不清楚这些对象中哪些是线程安全的(或不是线程安全的),或者哪些会导致在客户端库中创建线程。根据 QPID FAQ,代理的线程发生在会话级别。没有提到它发生在客户端的位置。

客户端应用程序中有多个线程上下文需要将数据推送到上行链路队列之一。最好有一个服务于多个上下文的会话、连接或发件人池?或者 QPID 是否在这种情况下内置了优化,这可能意味着 1 个共享发件人就足够了?

目标是在某处不存在单线程瓶颈,而是能够根据当前的流量负载有效地并行扩展。

【问题讨论】:

    标签: c++ multithreading client amqp qpid


    【解决方案1】:

    代理中的线程发生在连接级别。 IE。给定连接上的所有流量都由线程池序列化和服务。在客户端,有一个由所有连接共享的线程池来执行所需的 IO。应用程序可以自己创建线程来驱动发送者/接收者。提到的所有对象(连接、会话、发送者和接收者)都是线程安全的,但通常我会建议每个会话一个线程,并且每个连接可能一个会话是最佳的。

    【讨论】:

    • 嗨,在文档或其他地方有关于线程安全的一些信息吗?谢谢。
    猜你喜欢
    • 2013-07-19
    • 2016-11-26
    • 2019-05-17
    • 1970-01-01
    • 2010-11-25
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    相关资源
    最近更新 更多