在多核虚拟机上使用多个线程时,我有奇怪的核心使用行为。
我们有验证程序,该程序用于确认一些内部计算,这些计算可能会占用大量CPU。要验证的计算通过UDP发送到此中央验证服务器,消息流量负载确实很大。为了处理UDP吞吐量,我们有许多实例在不同的端口上进行侦听,每个实例具有1个io_context,其中1个线程用于UDP套接字读取,还有1个io_context,用于具有12个线程的CPU密集型操作。
真正使我感到困惑的是,为什么所有CPU内核的利用率都不同?我看起来前1/2个核心比后1/2个利用率高100%。为什么?
我们还有另一个在多核CPU上运行的单实例应用程序。单个io_context上有许多线程。它总共可以完成不同的任务,但是CPU核心利用率的分布类似于已经提供的情况。
boost asio io_context背后的整个想法是否隐藏了多线程使用的复杂性?我可以扩展线程池并在创建的线程本机句柄上设置亲和力,但这会破坏可移植性,并以某种方式再次使用boost asio的想法。