Answer

1.为什么要使用线程池

    线程是稀缺资源,使用线程池可以减少线程创建和销毁的次数,达到线程复用的目的;

    可以根据系统的承受能力,调节工作线程的个数,防止消耗过多内存导致服务器崩溃。

2.线程池设置多大?

    充分利用系统资源,增强服务器的吞吐量,同时尽可能减少不必要的线程切换。    

  • 如果是CPU密集型应用,则线程池大小设置为N+1
  • 如果是IO密集型应用,则线程池大小设置为2N+1

    最佳线程数目 = (线程等待时间与线程CPU时间之比 + 1)* CPU数目

3.如何充分利用系统资源

   根据短板效应,真实的系统吞吐量并不能单纯根据CPU来计算。那要提高系统吞吐量,就需要从“系统短板”(比如网络延迟、IO)着手: 

  • 尽量提高短板操作的并行化比率,比如多线程下载技术
  • 增强短板能力,比如用NIO替代IO

4.是不是多线程就一定高效呢

      答案是否定的,比如Redis就是单线程的,但它却非常高效,基本操作都能达到十万量级/s。当然“Redis很快”更本质的原因在于:Redis基本都是内存操作,这种情况下单线程可以很高效地利用CPU。而多线程适用场景一般是:存在相当比例的IO和网络操作。

      Dark Magic 估算方法

 http://ifeve.com/how-to-calculate-threadpool-size/

posted @ 2017-11-12 19:33  nozbwang  阅读(138)  评论(0编辑  收藏  举报