分配线程池究竟设置多大还是要看你的执行的任务,不要单方面看,线程任务分为Cpu密集型和IO密集型、混合型。
主要看系统运行的任务是什么类型的,
主要分为3种类型任务:CPU密集型和IO密集型,混合型任务
cpu密集型:一般分配N+1,什么是cpu密集型认为,则是任务运行时间快,像单线程处理,如果这种任务你把线程池数量设置过大,会导致cpu上下文切换,这样会导致cpu额外开心和耗时,本来是解决任务异常执行或处理并发任务。
IO密集型:一般发分配2N+1(意思则是(2*cpu线程核心数量)+1),这种任务是偏向IO处理连接,这种任务为什么要设置那么大呢。因为任务密集都会访问IO处理,导致线程回收很慢,如果设置过小会导致线程排队,多半会保存到队列里面,如果队列和执行队列满的话。这样可能会线程任务丢失,导致不必要的麻烦。
混合型:一般这类型要从线程任务分析到底是CPU密集型还是IO密集型,就用相应的对策。如果各占一半,则就创建两个线程,分别为Cpu密集和IO密集型。这样保证cpu合理安排。
线程池估算数量=(线程等待时间+cpu运行时间)/线程运行时间
如果不确定设置都是,就分析系统任务有多少,每个任务执行时间来计算。
可以根据压测来测试线程池运行,是否异常。
队列大小根据任务分析来设置,不要过大或过小。适可就行。