【问题标题】:C++ Boost.Asio - tcp socket asynchronous writeC++ Boost.Asio - tcp 套接字异步写入
【发布时间】:2014-01-01 21:57:51
【问题描述】:

场景:

  1. 在对象 A(线程 A)内部,正在异步读取和写入 boost::asio::ip::tcp::socket。

  2. 对象 B(线程 B)将数据发送到对象 A 的数据队列。

  3. 对象 A 应尽快将数据写入其数据队列中。

如何高效实现第三点?

现在我正在这样做:

  1. 队列中可能没有数据。

  2. socket->async_send(data, handler);

  3. 内部处理程序:回到第二点。

我担心这种方法效率非常低 - 大多数时候使用零长度数据调用 async_send,直到可以发送实际数据。

也许更好的方法是在对象 A 中增加一个线程,在发布新数据后立即在套接字上执行同步写入?从对象 B 的线程执行写入是没有问题的。

【问题讨论】:

    标签: c++ boost boost-asio


    【解决方案1】:

    首先,除非您有充分的理由这样做,否则我个人不会将其分解为每个对象 1 个线程。

    相反,有一个共享的io_service(只需通过引用 A 和 B ctor 来传递它。然后在 io_serice.run() 上有一个线程。

    假设其中一个对象也是 async_reading,您无需写入 0 长度数据并在处理程序中创建循环。只需将async_write 安排为数据传入的时间。

    【讨论】:

      【解决方案2】:

      对象 A 应该尽快将数据写入其数据队列中”可以理解为等待 C++ 未来,因此您检查 answerboost::asio::example 和最后一个但并非最不重要的是,我认为您的“数据队列”需要进行一些改进,您可以查看that answer

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-25
        • 2010-11-24
        • 2015-08-04
        • 1970-01-01
        • 2021-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多