【发布时间】:2019-03-11 07:52:51
【问题描述】:
我目前正在编写一个多线程服务器,其中每个线程都有一个 io_context 和一个要执行的任务对象列表,每个任务对象都有一个关联的 ip::tcp::socket 对象。
为了负载平衡,我有时会将任务从一个线程迁移到另一个线程,但我也想在不断开连接的情况下迁移它们的套接字。
我可以简单地在线程之间传递套接字对象的所有权,但是套接字的 io_context 将保持其原始线程的所有权,这会增加显着的复杂性/减速。
我有什么方法可以在将套接字连接移动到不同的 io_context 时保持它?还是有其他推荐的方法?
非常感谢
【问题讨论】:
-
我不认为
io_context真正拥有套接字。我想它拥有服务,它肯定拥有挂起/活动的处理程序。现在,我 /think/ 使用套接字,它只是实际共享的句柄。至少,我已经用这个(多个io_services 和来回传递套接字)运行了一段时间(几年)并且没有发现任何问题。不过有趣的问题。 +1
标签: multithreading boost-asio epoll