线程池的大小应该为多少
结论:线程等待时间所占比例越高,需要越多线程。线程CPU时间所占比例越高,需要越少线程(防止过多的上下文切换)。
最佳线程数目 = (线程等待时间与线程CPU时间之比 + 1)* CPU数目
http://my.oschina.net/u/175660/blog/389346
是否使用线程池就一定比使用单线程高效呢?
答案是否定的,比如Redis就是单线程的,但它却非常高效,基本操作都能达到十万量级/s。从线程这个角度来看,部分原因在于:
1.多线程带来线程上下文切换开销,单线程就没有这种开销
2.锁
当然“Redis很快”更本质的原因在于:Redis基本都是内存操作,这种情况下单线程可以很高效地利用CPU。而多线程适用场景一般是:存在相当比例的IO和网络操作。
所以当要用多线程需要结合系统真实情况(比如是IO密集型或者是CPU密集型或者是纯内存操作)和硬件环境(CPU、内存、硬盘读写速度、网络状况等)来不断尝试达到一个符合实际的合理估算值。