场景:
在对象 A(线程 A)中,boost::asio::ip::tcp::socket 正在异步读取和写入。
对象 B(线程 B)将数据发布到对象 A 的数据队列。
对象A应尽快将数据写入其数据队列。
如何高效的实现第三点?
现在我正在这样做:
队列中可能没有数据。
socket->async_send(data, handler);
内部处理程序:回到第二点。
我担心这种方法效率非常低 - 大多数时候使用零长度数据调用 async_send,直到可以发送实际数据。
可能更好的方法是在对象 A 中有一个额外的线程,一旦发布新数据就在套接字上执行同步写入?从对象 B 的线程执行写入是不可能的。
最佳答案
首先,除非您有充分的理由这样做,否则我个人不会将其分解为每个对象 1 个线程。
取而代之的是,拥有一个共享的io_service
(只需通过引用将其传入 A 和 B 构造函数。然后在 io_serice.run()
上拥有一个线程。
假设其中一个对象也是 async_reading,您无需编写 0 长度数据并在处理程序中创建循环。只需将 async_write
安排为数据进来的时间。
关于C++ Boost.Asio - tcp 套接字异步写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20873720/