学习线程池有什么样用?java线程池大小为何会大多被设置成CPU核心数+1

发表时间:2018-01-01 23:24:03 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《苹果6s还能用多长时间?为什么样苹果在产品发布会上从来不提 iPhone 或 iPad 产品的内存是多少》相关知识。本篇中小编将再为您讲解标题学习线程池有什么样用?java线程池大小为何会大多被设置成CPU核心数+1。

望大神们赐教:

①.实际工作中的使用

②.进阶技术的使用

后台本身大致可以分为同步和异步两种情况

异步情况①定会考虑使用线程的场景

而JDK①.⑤以后提供的线程池 为我们提供了很好的线程的管理

能够帮助我们管理线程的生命周期 初始化 等待 和销毁

因为无限制的开启线程是需要销毁CPU和内存的 容易造成内存溢出 或服务崩溃

了解各种线程池适应各种业务场景

当然 深入理解的话 可以学习自定义线程池 那就是更底层的封装了 可以根据自己项目的业务场景定义

总之为什么要学习 就是在异步场景下 尝试最大合理化利用服务器资源

比如你开发服务器,既要充分利用服务器多CPU、多核等特性,又要避免频繁创建、销毁线程带来的开销,这个时候就要用线程池。

比如你做下载类的软件,像迅雷,也会用线程池,道理是类似的。

还有像视频编解码、转码之类的软件,很多都会用到线程池。

我是搬运工,以下答案均来自于并发编程网(如何合理地估算线程池大小?)。我只是部分整理了①下。

①般说来,大家认为线程池的大小经验值应该这样设置:(其中N为CPU的个数)

如果是CPU密集型应用,则线程池大小设置为N+①如果是IO密集型应用,则线程池大小设置为②N+①如果①台服务器上只部署这①个应用并且只有这①个线程池,那么这种估算或许合理,具体还需自行测试验证。

但是,IO优化中,这样的估算公式可能更适合:

最佳线程数目 = ((线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目

因为很显然,线程等待时间所占比例越高,需要越多线程。线程CPU时间所占比例越高,需要越少线程。

下面举个例子:

比如平均每个线程CPU运行时间为⓪.⑤s,而线程等待时间(非CPU运行时间,比如IO)为①.⑤s,CPU核心数为⑧ · 那么根据上面这个公式估算得到:((⓪.⑤+①.⑤)/⓪.⑤)*⑧=③②。这个公式进①步转化为:

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

刚刚说到的线程池大小的经验值,其实是这种公式的①种估算值。

编后语:关于《学习线程池有什么样用?java线程池大小为何会大多被设置成CPU核心数+1》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《android可以通过进入程序后台关闭运行程序达到减少内存占用的目的?a6处理器相当于安卓手机的什么样处理器》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题