这个问题首先应该知道,目前cpu 的核数,因为只有知道了核数,才可以预估出最佳的线程池大小 什么意思呢?
io密集型 就是类似于有io操作那种,耗时较长,那么CPU处理一个线程的时候就很空闲 密集型任务,就是耗时较短的操作,那么处理一个线程CPU,可能会非常忙
1 对于不同性质的任务来说,CPU密集型任务应配置尽可能小的线程,如配置CPU个数+1的线程数,IO密集型任务应配置尽可能多的线程,因为IO操作不占用CPU,不要让CPU闲下来,应加大线程数量,如配置两倍CPU个数+1 2 若任务对其他系统资源有依赖,如某个任务依赖数据库的连接返回的结果,这时候等待的时间越长,则CPU空闲的时间越长,那么线程数量应设置得越大,才能更好的利用CPU。当然具体合理线程池值大小,需要结合系统实际情况
那么当为密集型任务的时候,如果线程池数目设置的很大,那么就会导致CPU频繁切换上下文,浪费CPU,这个时候的线程池数据应尽量接近CPU数目 当为IO密集型任务,如果线程池数目设置过小,会导致很多时候,CPU都在等待IO操作,浪费CPU资源,所以此时应该合理扩大线程池数目;
如果是CPU密集型应用,则线程池大小设置为N+1 如果是IO密集型应用,则线程池大小设置为2N+1
也就是说,要根据业务的具体时间情况,确定线程池的大小;自己区分业务类型,当然也会有混合型任务,既有io操作,又有密集型存在,这种情况,可以选择将任务拆分,然后用两个线程池搞定,但是正常来说,这种可以按照密集型任务处理;