线程池相关问题 快来打我* 2023-03-04 11:23 4阅读 0赞 线程池相关问题 问题1:为什么要使用线程池,优势是什么? 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最 大数量超出数量的线程排队等候,等其它线程执行完毕,再从队列中取出任务来执行。 他的主要特点为:线程复用;控制最大并发数:管理线程。 第一:降低资源消耗。通过重复利用己创建的线程降低线程创建和销毁造成的消耗。 第二:提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。 第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进 行统一的分配,调优和监控 问题2:线程池七大参数 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Noa3N0YXJ0_size_16_color_FFFFFF_t_70] 问题3:线程池底层工作原理 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Noa3N0YXJ0_size_16_color_FFFFFF_t_70 1] 问题3:线程池拒绝策略 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Noa3N0YXJ0_size_16_color_FFFFFF_t_70 2] 问题4:如何自定义线程池 ![在这里插入图片描述][2020080315312467.png] 问题5:如何配置合理的线程数 CPU密集型 CPU密集的意思是该任务需要大量的运算,而没有阻塞,CPU一直全速运行。 CPU密集任务只有在真正的多核CPU上才可能得到加速(通过多线程), 而在单核CPU上,无论你开几个模拟的多线程该任务都不可能得到加速,因为CPU总的运算能力就那些。 CPU密集型任务配置尽可能少的线程数量:一般公式:CPU核数+1个线程的线程池 IO 密集型 由于IO密集型任务线程并不是一直在执行任务,则应配置尽可能多的线程,如CPU核数\*2 I0密集型,即该任务需要大量的I0,即大量的阻塞。 在单线程上运行I0密集型的任务会导致浪费大量的CPU运算能力浪费在等待。 所以在IO密集型任务中使用多线程可以大大的加速程序运行,即使在单核CPU上,这种加速主要就是利用了被浪费掉的阻塞时间。 I0密集型时,大部分线程都阻塞,故需要多配置线程数:参考公式:CPU核数11-阻塞系数 阻塞系数在0.8~0.9之间比如8核CPU:8/1-0.9=80个线程数 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Noa3N0YXJ0_size_16_color_FFFFFF_t_70]: /images/20230208/9af6878d89544d2996285631efe5dd1e.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Noa3N0YXJ0_size_16_color_FFFFFF_t_70 1]: /images/20230208/e8c1fe1079d04b24826da823064593e8.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Noa3N0YXJ0_size_16_color_FFFFFF_t_70 2]: /images/20230208/2f7f3a6205d04f8897908f6bc96a9e80.png [2020080315312467.png]: /images/20230208/b54d03e5ce774ebcad0dfa4bf6c22a41.png
还没有评论,来说两句吧...