当前位置: 首页 > news >正文

凡客建站网wordpress如何修改模板

凡客建站网,wordpress如何修改模板,河南省南阳市建设局网站,南通网站建设seo文章目录1 线程池快速回顾2 现有设置参数的方法及不足3 如何设置核心线程数#xff08;corePoolSize#xff09;4 如何设置最大线程数#xff08;maxPoolSize#xff09;5 如何改变等待队列长度想必大家对Java里面线程池#xff08; 类#xff09;一定不陌生吧#xff0… 文章目录1 线程池快速回顾2 现有设置参数的方法及不足3 如何设置核心线程数corePoolSize4 如何设置最大线程数maxPoolSize5 如何改变等待队列长度想必大家对Java里面线程池 类一定不陌生吧无论是在日常工作还是面试题里都经常会有它的身影特别是在当前CPU动辄就是好多核的背景下了解并使用线程池已经成为一名合格后端开发的基本功了。 相信大家也一定思考过一个问题面对各种各样的场景线程池的参数到底应该怎么设计呢这一定是一个超级难以回答的问题几天前的我也想不到一个标准的答案好在是发现了美团在2020年发表过的一篇文章里面给了一个非常高级的操作——让线程池的参数动态化这就极大地提高了系统的自适应能力。 https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html 至于为什么我现在才看到_可能因为是太懒了吧。。。好在及时发现在此基础上进行一些分析不理解线程池的小伙伴们也不用担心我们首先来回顾一下它的核心思想在此技术上介绍如何将参数动态化起来~ 1 线程池快速回顾 《Java 并发编程的艺术》中提到了使用线程池的好处概括起来如下 降低资源损耗。通过重复利用已创建的线程降低线程创建和销毁的损耗。提高响应速度。当任务到达时任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。使用线程池可以进行统一的分配调优和监控。 Java里使用线程池主要就是用的ThreadPoolExecutor类先来看一下 ThreadPoolExecutor 类中的构造方法 /*** 用给定的初始参数创建一个新的ThreadPoolExecutor。*/ public ThreadPoolExecutor(int corePoolSize,//线程池的核心线程数量int maximumPoolSize,//线程池的最大线程数long keepAliveTime,//当线程数大于核心线程数时多余的空闲线程存活的最长时间TimeUnit unit,//时间单位BlockingQueueRunnable workQueue,//任务队列用来储存等待执行任务的队列ThreadFactory threadFactory,//线程工厂用来创建线程一般默认即可RejectedExecutionHandler handler//拒绝策略当提交的任务过多而不能及时处理时我们可以定制策略来处理任务) {if (corePoolSize 0 ||maximumPoolSize 0 ||maximumPoolSize corePoolSize ||keepAliveTime 0)throw new IllegalArgumentException();if (workQueue null || threadFactory null || handler null)throw new NullPointerException();this.corePoolSize corePoolSize;this.maximumPoolSize maximumPoolSize;this.workQueue workQueue;this.keepAliveTime unit.toNanos(keepAliveTime);this.threadFactory threadFactory;this.handler handler; }ThreadPoolExecutor 中最重要的参数 corePoolSize核心线程数。最小可以同时运行的线程数。maximumPoolSize当队列中存放的任务达到队列容量的时候当前可以同时运行的最大线程数。workQueue当新任务来的时候会先判断当前运行的线程数量是否达到corePoolSize如果达到的话新任务就会被存放在队列中。如果workQueue已经满了的话就执行拒绝策略。 ThreadPoolExecutor 的其他参数 keepAliveTime当线程池中的线程数量大于 corePoolSize 的时候核心线程外的线程不会立即销毁而是会等待直到等待的时间超过了 keepAliveTime 才会被销毁。unit : keepAliveTime 参数的时间单位。threadFactoryexecutor 创建新线程的时候会用到。handler拒绝策略。 当参数设置完毕后线程池的工作原理具体是什么呢我们可以通过下面这个面试题来理解一下 假设我们设置的线程池参数为corePoolSize10 maximumPoolSize20queueSize 10 20个并发任务过来有多少个活跃线程 10个。corePoolSize打满queueSize 也满 21个并发任务过来有多少个活跃线程 11个。corePoolSize打满queueSize 也满还多一个maximumPoolSize 20所以corePoolSize 1此时活跃的为11个。 30个并发任务过来有多少个活跃线程 20个。corePoolSize打满queueSize 也满corePoolSize扩充至20此时有20个活跃任务。 31个并发任务过来有多少个活跃线程 20个。corePoolSize打满queueSize 也满corePoolSize扩充至20还多一个如果是丢弃策略此时有20个活跃任务。 上面的流程可以总结成如下所示的流程图来源于https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html 2 现有设置参数的方法及不足 回顾完线程池的核心技术点之后就要开始思考本文主要讨论的内容了线程池参数应该如何设置 如果你把这个问题输入到浏览器里极大可能是下面这种答案 上面的理论看似很华丽但现实却是很残酷的。。。你会发现虽然按照上面的指导思想进行配置了但效果并不能让人满意造成这种后果的原因有很多包括但不仅限于 任务到底是CPU还是IO密集的特征不明显同一个机器上可能部署不止一个服务不同服务之间也会抢占资源 针对上述问题美团给出的对应的解决方案就是——线程池参数动态化 那么如何实现参数动态化呢 接触过微服务开发的同学们可能就会想到了我们完全可以借助一个配置中心来做这样就能够实现线程池参数的动态配置和即时生效在阿里内部也有一个专门的中间件diamond省去了重新部署程序并发布的步骤通常在企业里这一系列流程下来还是比较费时间的。 来源于https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html 3 如何设置核心线程数corePoolSize 其实 ThreadPoolExecutor 类库里直接就有这个方法 public void setCorePoolSize(int corePoolSize) {if (corePoolSize 0)throw new IllegalArgumentException();int delta corePoolSize - this.corePoolSize;this.corePoolSize corePoolSize;if (workerCountOf(ctl.get()) corePoolSize)interruptIdleWorkers();else if (delta 0) {// We dont really know how many new threads are needed.// As a heuristic, prestart enough new workers (up to new// core size) to handle the current number of tasks in// queue, but stop if queue becomes empty while doing so.int k Math.min(delta, workQueue.size());while (k-- 0 addWorker(null, true)) {if (workQueue.isEmpty())break;}} }我们直接看英文注释这就是作者直接想要表达的意思。大致翻译一下 设置线程的核心数量如果新的corePoolSize值小于当前corePoolSize值多出来的线程将在其下次空闲时被终止。如果新的corePoolSize值大于当前corePoolSize值就可以创建新的worker来执行队列里的任务 来源于https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html 4 如何设置最大线程数maxPoolSize 同样地 ThreadPoolExecutor 类库里也有这个方法 public void setMaximumPoolSize(int maximumPoolSize) {if (maximumPoolSize 0 || maximumPoolSize corePoolSize)throw new IllegalArgumentException();this.maximumPoolSize maximumPoolSize;if (workerCountOf(ctl.get()) maximumPoolSize)interruptIdleWorkers(); }这个方法的注释和上面的方法类似大家可以对照着看 逻辑也并不复杂 参数校验设置最大线程数 maxPoolSize如果工作线程数是否大于最大线程数则对空闲线程发起中断 JDK原生线程池ThreadPoolExecutor还提供了其他设置参数的方法 5 如何改变等待队列长度 等待队列的长度capacity被final修饰符修饰所以按理说是不能修改的 private static final int CAPACITY (1 COUNT_BITS) - 1;唯一可能的办法就是自己定义一个队列在美团的实现里就是一个名为ResizableCapacityLinkedBlockIngQueue的队列根据名称也不难看出这个队列的容量是可变的。 具体的实现细节美团好像并没有公布出来不过我们可以简单的将原先LinkedBlockingQueue的capacity的final修饰符去掉并提供getter和setter方法形成我们自己的ResizableCapacityLinkedBlockIngQueue
http://www.zqtcl.cn/news/720678/

相关文章:

  • 邯郸网站建设效果好广西做网站的公司
  • 网站logo上传营销型网站制作方案
  • 小说网站静态模板站长工具seo综合查询adc
  • 北京响应式网站做logo那个网站
  • 如何申请免费网站空间刚察县wap网站建设公司
  • 哪里有网站推广软件免费推广seo策略方法
  • 阿里云备案网站 网站名称怎么写京icp备案查询
  • 网站开发岗位思维导图alexa排名
  • 自适应网站建设济南济南网站建设公司
  • 巴州网站建设库尔勒网站建设钟爱网络杭州微信网站制作
  • 52做网站南京市住房城乡建设门户网站
  • 网站开发精品课程贵阳市白云区官方网站
  • seo整站优化服务会计培训班一般收费多少
  • 批量网站访问检测怎么做好手机网站开发
  • 深圳网站建设公司哪家比较好shortcodes wordpress
  • 网站内链越多越好嘛可以做3d电影网站
  • 企业网站需求文档微商引流客源最快的方法
  • 交互式网站备案业务网站在线生成
  • 自建网站百度个人网站如何在百度上做推广
  • 如何安装wordpress模板竞价网站做seo
  • 做论坛网站如何赚钱电子商务营销推广
  • 想要自己做一个网站怎么做济宁百度网站建设
  • 海会网络建设网站wordpress刷不出图片
  • 一个人做商城网站网站推广的几个阶段
  • 做国学类网站合法吗html5教程pdf下载
  • 云南省文化馆网站建设二级域名分发平台
  • 网站版面布局结构图网站收录批量查询
  • 网站开发手机模拟器常州到丹阳
  • 淮南医院网站建设班级网站开发报告
  • 东莞营销网站建设哪家好微信api接口