目前我不确定,我试图制作一个高性能服务器,我有一个6核心CPU,所以如果我使用"io_service_per_CPU"设计,我有6个io_service。
我已经听说线程池设计不是最好的,但我不确定。
你有什么知识?有人已经对每个人做了压力测试,还是其他什么?
根据我的经验,按照以下顺序进行异步应用程序设计要容易得多:
- 单线程和单
io_service
- 多个线程,每个线程从单个
io_service
调用io_service::run()
。对需要访问共享数据结构的处理程序使用链 - 每cpu
io_service
在对应用程序进行分析之后,应该确定在每种设计之间进行更改的动机。请注意,HTTPServer2示例只显示了如何使用每个CPU的io_service
,而没有显示何时或为什么使用这种设计。
实现这一点的另一个好方法是:启动流程的多个副本,并使用操作系统将每个副本绑定到不同的核心。对于FreeBSD,请使用cpuset
。操作系统将比任何用户代码做得更好。然后,您需要使用外部负载均衡器在服务器实例之间分配负载。将NIC中断绑定到特定CPU的额外点数。