是的,你的推理基本上是正确的。您将为每个线程创建一个线程,为每个线程创建一个io_service实例,并在每个线程中调用io_service.run()。
但问题是你是否真的这样做。这是我看到的问题:
您可以结束了非常繁忙的内核和空闲核心根据工作是如何通过你的连接平衡。微内核中缓存命中的微优化可能意味着,当“最佳”内核没有准备好时,最终会失去让空闲内核工作的能力。
在套接字速度(即:慢),你会从CPU高速缓存命中获得多少胜利?如果一个连接需要足够的CPU来保持内核忙碌,并且只有与内核连接的连接数量很多,那就太棒了。否则,无法移动工作来处理工作负载的变化可能会破坏您从缓存命中中获得的任何胜利。如果你在每个线程中做很多不同的工作,缓存不会太热。
如果你只是在做I/O,无论如何,缓存获胜可能并不那么大。取决于你的实际工作量。
我的建议是有一个io_service实例并在每个核心的线程中调用io_service.run()。如果性能不足或者每个连接有很多CPU的连接类别,并且您可以获得缓存胜利,请将这些连接移至特定的io_service实例。
在这种情况下,您应该进行分析以查看有多少缓存未命中导致您的成本以及在哪里。
很好的回答,很好的推理。我可能会坚持你的建议,直到我看到一个问题 - 很高兴知道如果我选择微观优化是可能的。 – 2010-03-03 09:54:09