1.线程数设置
IO密集计算:如何将硬件利用率达到极致呢 我们将 R = IO耗时 / Cpu耗时 我们从上面的例子来看 如果IO耗时/Cpu耗时 = 10 (我们平常可以用工具apm来统计这个比例) 创建线程A 执行io操作 我们希望IO操作的时候 Cpu不能闲着 所以就应该创建10个线程去执行Cpu计算 当Io操作完毕后刚好Cpu也执行完毕 ,他们的利用率都是百分之100 在执行这段代码的时候。
这个例子我们要创建 1+ 10 = 11个线程执行起来效率更高,于是我们就得到了公式: 1+ I/O耗时/Cpu耗时,如果是多核Cpu 最佳线程数 =CPU 核数 * [ 1 +(I/O 耗时 / Cpu 耗时)
Cpu密集型:这个就很简单了 Cpu的核数 = 线程数就行,一般我们会设置 Cpu核数+1 防止由于其他因素导致线程阻塞等。
2.客户并发访问量超过线程最大设置数
可以通过线程池+等待队列的形式来处理,比如说线程池是500,高峰期可能出现线程池已经满了但是还有用户请求不断过来,这时就要把这些请求放到等待队列里面,等待队列设定一个最大等待时间,超过最大等待时间的请求自动拒绝,当线程池有空位的时候自动通知等待队列把用户请求转发到线程池处理。