这更像是一个算法问题。我有一个用C ++编写的异步服务器。这是一个简单的http处理特殊请求 - 提供产品计算。该服务为N核心机器创建N + 1个线程。 当计算超过N时,向客户端发送503错误。虽然这在技术上是正确的,但我希望避免这种情况。可能暗示一台更大的机器,但机器的平均负载低于2%,因此没有理由这样做。我只想将额外的请求排队等待机器不太繁忙的时间(一两秒钟是可以接受的)我正在使用boost进行异步操作。
现在问题在于:如果我要通过N + 1线程对额外请求进行排队,可能会出现永远不会获取请求的情况(如果所有N个线程都离开了队列)并且N + 1线程插入新请求)然后该请求将一直延续到下一个请求以释放它。其他选项是使用 post()方法。这里的问题是,如果所有N个线程都忙,这将加载N + 1线程。从而使服务器不可用。
简单但不好的解决方案是增加线程数。大部分时间都低于限制,但是当它通过核心数量时,系统调度程序将限制将阻碍性能的线程。
由于每503花钱并且最后一个解决方案实际上可行,所以它并不可怕,但到目前为止,这个服务器是异步编程的展示案例,所以我正在寻找一种方法来保持这样。
欢迎任何想法!