boost::asio线程池与io_service_per_cpu设计



目前我不确定,我试图制作一个高性能服务器,我有一个6核心CPU,所以如果我使用"io_service_per_CPU"设计,我有6个io_service。

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

你有什么知识?有人已经对每个人做了压力测试,还是其他什么?

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

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

在对应用程序进行分析之后,应该确定在每种设计之间进行更改的动机。请注意,HTTPServer2示例只显示了如何使用每个CPU的io_service,而没有显示何时或为什么使用这种设计。

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

相关内容

  • 没有找到相关文章

最新更新