boost :: asio threadpool vs. io_service_per_cpu design

Aur*_*rus 7 c++ multithreading boost boost-asio threadpool

目前我不确定,我尝试制作高性能服务器,我有一个6Core CPU,所以如果我使用"io_service_per_cpu"设计,我有6个io_service.

我已经听说线程池设计不是最好的,但我不确定.

你有什么知识?有人已经用每个或其他东西做过压力测试吗?

Sam*_*ler 7

根据我的经验,按以下顺序处理异步应用程序设计要容易得多:

  1. 单线程和单个线程 io_service
  2. 多个线程,每个线程都io_service::run()从一个调用io_service.对需要访问共享数据结构的处理程序使用strands.
  3. io_service 每个CPU

在分析您的应用程序之后,应该在每个设计之间进行更改.请注意,HTTP Server 2示例仅显示如何使用io_service每个CPU,它不会向您显示何时或为何使用此类设计.


Sea*_*ean 5

解决此问题的另一种好方法是:启动进程的多个副本,并使用您的操作系统将每个副本绑定到不同的内核。对于 FreeBSD,请使用cpuset. 操作系统将比任何用户空间代码做得更好。然后您需要使用外部负载平衡器在您的服务器实例之间分配负载。将 NIC 中断绑定到特定 CPU 的额外要点。