在 Boost:asio 如何为任何特定的 activity 保留一个线程

In Boost:asio how to reserve one thread for any particular activity

我正在创建一个 HTTP 客户端,我需要在其中将数据推送到服务器。一切正常,现在的要求是应该为某些优先级数据与服务器建立一个专用连接。例如我有 2 个与服务器打开的 HTTP 连接,然后一个连接应该始终可用于将高优先级数据推送到服务器,而另一个连接可用于推送其余内容。

我尝试过 make_strands 使用 this 但这会使我的活动按顺序执行。

我也尝试过多个 io_context 但它增加了额外的复杂性。有什么简单的方法可以满足要求。谢谢

I also tried with multiple io_context but it adds additional complexities.

我认为这是一个基本的误解:实际上并非如此(只要您没有明确地将处理程序绑定到来自不同执行上下文的执行程序,就可以了。但是这样的事情很难偶然发生)。


现在如果要求是:

For e.g. I have 2 HTTP connections open with server then one connection should always be available to push high priority data to server and where as the other connection can be used for pushing rest of stuff.

那么答案是您完全可以不使用多线程。如果您似乎仍然需要线程,这表明您正在处理程序中执行更长的 运行ning 任务(阻塞 io 线程)。

事实上,在这种情况下,您可能确实希望在单独的线程上有一个专用的执行上下文 运行。

考虑到您先前存在的情况,最简单的解决方案确实是 io_context 您 运行 来自它自己的线程。

My more common guideline would be the inverse: prevent the situation you have by never executing any blocking tasks on the UI thread. This leads to a design where I have only one IO thread usually, and the actual work gets put on task queues that can be serviced from a thread pool. Only when the task ready to send a response, they will post their IO operation to the IO context.

As you probably know complexity is easier to prevent than it is to achieve simplicity after-the-fact.