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

用vs2013网站开发徐州市建设工程

用vs2013网站开发,徐州市建设工程,门户网站的发布特点,潍坊专业人员继续教育网络平台登录线程池 什么是线程池:线程池就是管理一系列线程的资源池。 当有任务要处理时,直接从线程池中获取线程来处理,处理完之后线程并不会立即被销毁,而是等待下一个任务。 为什么要用线程池 / 线程池的好处: **降低资源消…

线程池

什么是线程池:线程池就是管理一系列线程的资源池。

当有任务要处理时,直接从线程池中获取线程来处理,处理完之后线程并不会立即被销毁,而是等待下一个任务。

为什么要用线程池 / 线程池的好处:
  • **降低资源消耗。**通过重复利用已创建的线程降低线程创建和销毁造成的消耗

  • **提高响应速度。**当任务到达时,任务可以不需要等到线程创建久能立即执行。

  • **提高线程的可管理性。**统一管理线程,避免系统创建大量同类线程而导致消耗完内存。

线程池的应用:

比如我们系统 Web 服务器用的 Tomcat,Tomcat 处理每一个请求都会从线程连接池里面用一个线程去处理,又比如说我们连接数据库会用对应连接池 Druid德鲁伊等

还有实际开发中的定时任务,该任务的链路执行时间和过程都非常长,就会用一个线程池将该定时任务的请求进行处理。这样做好处就是可以及时返回结果给调用方,能够提高系统的吞吐量

// 请求直接交给线程池来处理 
public void push(PushParam pushParam) {try {pushServiceThreadExecutor.submit(() -> {handler(pushParam);});} catch (Exception e) {logger.error("pushServiceThreadExecutor error, exception{}:", e);}
}
如何创建线程池
  • 通过 ThreadPoolExecutor 构造函数来创建(推荐)
  • 通过 Executor 框架的工具类 Executors 来创建

为什么不推荐使用内置线程池(通过 Executor 框架的工具类 Executors 来创建):通过 ThreadPoolExecutor 构造函数的方式,这样的处理方式让开发人员更加明确线程池的运行规则,规避资源耗尽的风险

线程池常见参数有哪些
ThreadPoolExecutor 3个最重要的参数
  • corePoolSize:任何队列未达到队列容量时,最大可以同时运行的线程数量

  • maxinumPoolSize:当任务队列存放的任务达到队列容量的时候的最大线程数量。任何队列中存放的任务达到队列容量的时候,会创建新的线程运行任务。否则根据拒绝策略处理新任务。

  • workQueue:任务队列:新任务来的时候会先判断当前运行的线程数量是否达到核心线程数,如果达到的话,新任务就会被存放在队列中

    keepAliveTime:线程池中的线程数量大于 corePoolSize 的时候,如果这时没有新的任务提交,核心线程外的线程不会立即销毁,而是会等待,直到等待的时间超过了 keepAliveTime才会被回收销毁。非核心线程空闲后,保持存活的时间;设置为0,表示多余的空闲线程会被立即终止

    unit:keepAliveTime 参数的时间单位

    threadFactory:

    handler:饱和策略

线程池的饱和策略:
  • ThreadPoolExecutor.AbortPolity:抛出 RejectedExecutionException来拒绝新任务的处理
  • ThreadPoolExecutor.CallerRunsPolicy:
  • ThreadPoolExecutor.DiscardPolicy:
  • .DiscardPolicy:
  • .DiscardOldestPolicy:
如何处理这些参数 / 线程池大小怎么设置
CPU密集型任务(N + 1)

消耗CPU资源,将线程数设置为 N(CPU 核心数)+1,比 CPU 核心数多出来一个线程是为了防止线程阻塞、锁等原因导致的任务暂停带来的影响。一旦某个线程被阻塞,释放了 cpu 资源,多一个线程就可以充分利用 CPU 的空闲时间

IO密集型

系统会用大部分时间处理 I/O 操作,而线程等待 I/O 操作会被阻塞,释放CPU资源,这是就可以将 CPU 交出给其它线程使用。因此在 I/O 密集型任务应用中,可以多配置一些线程:

最佳线程数 = CPU核心数 * (1/CPU利用率) = CPU 核心数 * (1 + (I/O耗时 / CPU耗时))

线程池过小:当有大量请求需要处理,系统响应比较慢影响体验,甚至会出现在任务队列大量堆积导致OOM

线程池过大:大量线程同时争取 CPU 资源,这样会导致大量的上下文切换,增加线程执行时间,影响整体执行效率

CPU密集型、IO密集型

如果你的应用主要是利用cpu计算,也就是更多的是消耗cpu资源的话,那么就是cpu密集型,如果更多的是和IO相关的,比如接收一个前端请求--解析参数--查询数据库--返回给前端这样的,那么就是IO密集型的。

线程池处理任务的流程

图解线程池实现原理

  1. 如果当前运行的线程数小于核心线程数,那么就会新建一个线程来执行任务
  2. 如果当前运行的线程数等于或大于核心线程数,但是小于最大线程,那么就把该任务放入到任务队列里等待执行
  3. 如果向任务队列投放任务失败,但是当前运行的线程数是小于最大线程数的,就新建一个线程来执行任务
  4. 如果当前运行的线程数已经等同于最大线程数了,新建线程将会是当前运行的线程超出最大线程数,那么当前任务会被拒绝,饱和(拒绝)策略会调用RejectedExecutionHandler.rejectedExecution() 方法

Excetors 工具类提供了哪些线程池?有什么问题吗?

Excetors 工具类提供的常见线程池如下:

  • FixedThreadPool:固定线程数量的线程池。该线程池中的线程数量始终不变。当有一个新的任务提交时,线程池中若有空闲线程,则立即执行。若没有,则新的任务会被暂存在一个任务队列中,待有线程空闲时,便处理在任务队列中的任务。
  • SingleThreadExecutor:只有一个线程的线程池。若多余一个任务被提交到该线程池,任务会被保存在一个任务队列中,待线程空闲,按先入先出的顺序执行队列中的任务。
  • CachedThreadPool:可根据实际情况调整线程数量的线程池。线程池的线程数量不确定,但若有空闲线程可以复用,则会优先使用可复用的线程。若所有线程均在工作,又有新的任务提交,则会创建新的线程处理任务。所有线程在当前任务执行完毕后,将返回线程池进行复用。
  • ScheduledThreadPool:给定的延迟后运行任务或者定期执行任务的线程池。

Excetors 工具类提供的常见线程池的弊端如下:

  • FixedThreadPoolSingleThreadExecutor:使用的是无界的 LinkedBlockingQueue,任务队列最大长度为 Integer.MAX_VALUE,可能堆积大量的请求,从而导致 OOM。
  • CachedThreadPool:使用的是同步队列 SynchronousQueue, 允许创建的线程数量为 Integer.MAX_VALUE ,如果任务数量过多且执行速度较慢,可能会创建大量的线程,从而导致 OOM。
  • ScheduledThreadPoolSingleThreadScheduledExecutor:使用的无界的延迟阻塞队列DelayedWorkQueue,任务队列最大长度为 Integer.MAX_VALUE,可能堆积大量的请求,从而导致 OOM。
http://www.yayakq.cn/news/705321/

相关文章:

  • 网站建设方案书 个人备案娄底建设企业网站
  • 建设银行的官方网站纪念币网站ip地址范围
  • 网站做浮动边框asp代码免费换ip软件
  • 创新的做网站咨询公司起名
  • 能打开的网站制作个人网站的六个步骤
  • 果汁网站模板河源市地震
  • 网站怎么做动态背景图片wordpress怎样添加模板
  • 大型信息类PC网站适合vue做吗中国航天空间站最新消息
  • 公司做的网站如何开启伪静态做购物网站的开题报告
  • 官方网站下载6966黄埔网站建设(信科网络)
  • 天汇大厦网站建设公司青海网网站建设
  • 天津做网站找哪家公司宁波品牌网站建设服务电话
  • 怎么开发一个自己的网站石家庄平台公司
  • 哪里制作网站好谷歌seo优化推广
  • 做球球棒棒糖网站源码自己怎么制作logo
  • python做网站需要什么开发个网站开票名称是什么
  • 三亚网站建设美工建设银行面试经验网站
  • 上海有名的网站建设公司有哪些孝昌县专注网站建设代理
  • 在线营销型网站建设互联网营销师考证报名入口
  • 泗洪做网站传媒公司主要做什么业务
  • 现在还有企业做网站吗做效果图需要什么软件
  • 成都建站优化小程序怎么制作网站
  • 网站备案授权书范本百度创建网站吗
  • 娄底市建设局网站当今做哪个网站致富
  • php网站开发实用技术下载有一个网站是做釆购的是什么网
  • 重庆企业官网建站快速搭建咸阳商城网站开发设计
  • 随州网站建设哪家专业网站的最终用户
  • 网站建设有哪些功能模块贵阳设计网站建设
  • 微站是什么律师网站维护
  • 和顺网站建设5自己建网站