先贴上provider的性能要求
最小活跃数算法不靠谱(因为会将请求尽量多地分到small上),但是把最小活跃数换个角度,用线程池总线程数 - 占用线程数, 得到剩余线程数。然后按照最大剩余线程数来排序。
具体做法也很简单: 每次provider收到一个请求,就将占用线程数+1, 完成一个请求,就将占用线程数-1, 用线程池总线程数减去占用的数量,之后每次选最大的。
线上表现:
这种算法可以说在原理上并没有什么先进性,但表现不算差。 均值为126万,最低124万,最高128万。
也许大道至减,看不少人用的加权随机、加权轮询等很简单的算法,也能跑127万左右。
已经有几个选手跑到131万了,所以还有很大的优化空间,更多方法后续更新。