我有一个用 C++ 编写的应用程序,它使用 boost::asio。它侦听套接字上的请求,并为每个请求执行一些 CPU 绑定的工作(例如,没有磁盘或网络 I/O),然后以响应响应。
该应用程序将在多核系统上运行,因此我计划每个内核(至少)1 个线程来并行处理请求。
这里最好的方法是什么?需要考虑的事情:
- 我需要一个固定大小的线程池(例如每个 CPU 1 个线程)
- 如果到达的请求比我拥有的线程多,那么它们需要排队(可能在 o/s 套接字层?)
目前服务器是单线程的:
- 它等待客户端请求
- 一旦收到请求,它就会执行工作,并将响应写回,然后开始等待下一个请求
更新:
更具体地说:我应该使用什么机制来确保如果服务器很忙,传入的请求会排队?我应该使用什么机制在 N 个线程(每个核心 1 个)之间分配传入请求?