http://ifeve.com/how-to-calculate-threadpool-size/.net
任务通常可分为:CPU密集型、IO密集型、混合型,对于不一样类型的任务须要分配不一样大小的线程池。线程
- CPU密集型任务
尽可能使用较小的线程池,通常为CPU核心数+1。
由于CPU密集型任务使得CPU使用率很高,若开过多的线程数,只能增长上下文切换的次数,所以会带来额外的开销。
- IO密集型任务
能够使用稍大的线程池,通常为2*CPU核心数。
IO密集型任务CPU使用率并不高,所以能够让CPU在等待IO的时候去处理别的任务,充分利用CPU时间。
- 混合型任务
能够将任务分红IO密集型和CPU密集型任务,而后分别用不一样的线程池去处理。
只要分完以后两个任务的执行时间相差不大,那么就会比串行执行来的高效。
由于若是划分以后两个任务执行时间相差甚远,那么先执行完的任务就要等后执行完的任务,最终的时间仍然取决于后执行完的任务,并且还要加上任务拆分与合并的开销,得不偿失。
获取CPU数量