Java 线程池

在这里插入图片描述

为什么阿里巴巴禁止使用 Executors 创建线程池?
cpu的核心数量为

val cpuCount = Runtime.getRuntime().availableProcessors()
val corePoolSize = cpuCount + 1
在Android开发中设置线程池的核心线程数为CPU的数量加1是一种常见的经验法则,这种设置旨在为常见的任务类型提供一个合理的性能平衡。原因如下:

  1. 充分利用CPU核心:当线程执行的任务主要是计算密集型的,你希望有足够的线程来保持所有CPU核心都在工作。如果线程数少于CPU核心数,可能会导致CPU资源没有被充分利用。

  2. 减少等待时间:在实际应用中,线程可能会因为IO操作(如网络请求或磁盘读写)而被阻塞。这时,即使有一个线程在等待IO操作,拥有一个额外的线程可以确保CPU在这种情况下仍然有工作可做,避免因为IO等待而造成的CPU空闲。

  3. 避免上下文切换开销:虽然增加更多线程可以进一步减少因IO等待引起的CPU空闲时间,但线程数量过多会导致频繁的上下文切换,从而降低系统整体性能。因此,通常线程数不会超过CPU核心数太多,CPU的数量+1是一个折中的选择。

  4. 适应轻度并发:一个额外的线程可以帮助处理那些偶尔超出CPU计算能力的情况,而不至于立即导致性能瓶颈。

然而,这只是一个经验上的建议,并不是适用于所有情况的最佳实践。实际上,合适的线程池大小取决于应用程序的具体需求和任务的特性。如果任务主要是I/O密集型的,那么可能需要更多的线程以保持CPU的利用率。如果任务主要是计算密集型的,那么线程池的大小则应该接近CPU核心数。

Android开发者应该根据自己的应用和性能测试结果来调整和优化线程池的大小。例如,使用Runtime.getRuntime().availableProcessors()方法可以获取当前设备的CPU核心数,然后据此来决定线程池的核心线程数。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值