首页 > 其他分享 >多线程Review-926-01

多线程Review-926-01

时间:2023-09-26 20:44:09浏览次数:41  
标签:01 队列 核心 Review 保活 任务 线程 多线程 CPU

一、进程与线程

1、进程:

①电脑管家等 软件 我们运行的应用程序

②在内存中正在运行的程序

2、线程:

①进程中的一个最小执行单元。一个进程最少得有一个线程

②软件中的每一个功能,如电脑管家中的清理垃圾、杀毒、软件搜索

二、线程的创建方式

1、继承Thread类    :

优点——代码清晰,编写简单。

缺点——单继承、继承局限性(不想继承其中所有功能。单一职责原则、接口隔离原则),线程不能返回值

2、实现Runable接口   :

优点——多实现,更灵活,可以使用匿名内部类、lambda表达式简单的创建。

缺点:编写复杂,线程不能返回值

3、实现Callable接口:

优点——线程有返回值,可以使用future对象的get方法对线程进行结果的接收。需要获取多个线程返回值并利用时可以使用这种方式。

缺点:编写复杂,需要实现Callable<返回值泛型>、FutureTask<返回值泛型> 对象参数callable,new Thread(future).start()

4、线程池:

优点:

资源管理、提高性能、限制并发数量、任务排队、线程复用、监控和管理

缺点:

资源消耗、线程间通信复杂性、不当使用可能导致问题、难以控制任务执行时间、不适用于所有场景:并不是所有的应用场景都适合使用线程池。例如,对于一些需要严格控制线程生命周期和资源的应用,手动管理线程可能更合适。

重点——线程池:

工作流程:

1、当有任务提交时,判断,是否达到核心线程数量?没达到,创建一个工作线程来执行任务。

2、工作队列是否已满?没满,则将新提交的任务存储在工作队列中。

3、是否达到线程池最大数量?没达到,则创建一个新的工作线程来执行任务

4、最后,执行拒绝策略来执行这个任务

图示1(任务提交工作流程):

 

 图示2(任务提交工作流程):

 线程池核心参数

1、核心线程数

2、最大线程数

3、阻塞队列

4、线程保活时间

5、临时线程保活时间单位 TimeUnit

6、线程工厂

7、拒绝策略:

AbortPolicy:丢弃任务并抛出RejectedExecutionException异常 (默认)

DiscardPolicy:丢弃任务,但是不抛出异常。如果线程队列已满,则后续提交的任务都会被丢弃,且是静默丢弃。

DiscardOldestPolicy:丢弃队列最前面的任务,然后重新提交被拒绝的任务。

CallerRunsPolicy:由调用线程处理该任务

你一般是怎么来设置这些参数?①具体是根据实际业务场景来的②核心线程数③最大线程数④队列长度⑤保活时间

1. **具体是根据实际业务场景来的:** 线程池参数的设置需要综合考虑系统的负载、性能需求、资源限制以及线程创建和销毁成本等因素。在实际应用中,通常需要进行性能测试和调优,以找到最佳的参数配置。同时,监控线程池的运行状态也是很重要的,以及时调整参数以适应变化的负载情况。

2. **核心线程数(Core Pool Size):** 这是线程池中保持活动状态的最小线程数。它应该根据系统的预期负载来设置。如果系统的负载通常较低,可以将核心线程数设置较低,以减少资源消耗。如果系统的负载通常较高,可以设置较高的核心线程数,以提高响应性。

3. **最大线程数(Maximum Pool Size):** 这是线程池中允许的最大线程数。它应该根据系统的最大负载来设置。如果系统需要处理高并发请求,可以设置较高的最大线程数,以确保有足够的线程可用。但要小心不要设置得太高,以避免消耗过多的系统资源。

4. **队列长度(Queue Capacity):** 队列用于存储等待执行的任务。队列长度应该根据系统的负载特点和内存限制来设置。如果系统的请求处理速度大于线程执行速度,可以选择一个相对较大的队列长度,以平滑负载峰值。但要注意,队列长度过大可能会导致内存消耗增加。如果系统的请求处理速度与线程执行速度相近,可以选择较小的队列长度,以减少内存消耗。

5. **保活时间(Keep-Alive Time):** 当线程池中的线程数量超过核心线程数时,多余的空闲线程会在一定时间内被销毁以减少资源占用。保活时间应该根据线程的创建成本和线程池的响应时间需求来设置。如果线程的创建成本较高,可以将保活时间设置较长,以减少线程的频繁创建和销毁。如果需要更快的响应时间,可以将保活时间设置较短,以确保线程池能够更快地响应新任务。

怎么参考设置核心线程数的具体值?

核心线程:
CPU密集型:核心线程数=CPU核心数(或 核心线程数=CPU核心数+1)。
I/O密集型:核心线程数=2*CPU核心数(或 核心线程数=CPU核心数/(1-阻塞系数))。

IO密集CPU核数X 2
CPU密集: CPU核数 +1

最大线程:
CPU密集型应用,最大线程设置为 N+1。
IO密集型经验应用,最大线程设置为 2N+1 (N为CPU数量)。

线程池创建了,里面有线程吗?

-没有,任务提交过来,创建线程去执行

如果提交任务数到达了最大线程数,请问,这个核心线程是多少?

-不变。当提交任务数达到最大线程数时,核心线程数的概念不再适用,线程池会继续创建非核心线程来处理任务,直到达到最大线程数的限制。核心线程数只在初始创建线程时和在非核心线程空闲一定时间后进行保活时起作用。

 

标签:01,队列,核心,Review,保活,任务,线程,多线程,CPU
From: https://www.cnblogs.com/qdcream/p/17727383.html

相关文章

  • Adobe全家桶2015-2024全套Win+Mac最新爱国版软件吐血整理(含AI绘画版本)
    爆肝整理,最全的设计类软件大全切记!!!先转存,随时都有可能被和谐。Windows系统版本截图:Mac系统版本截图:网盘下载:切记!!!先转存,随时都有可能被和谐。链接:https://pan.quark.cn/s/3a964f54ea82提取码:ZHYMAdobe全家桶软件目录、最新版本号(部分未及时更新,请进网盘查看):Adobe20......
  • 文心一言 VS 讯飞星火 VS chatgpt (101)-- 算法导论9.3 7题
    七、用go语言,设计一个O(n)时间的算法,对于一个给定的包含n个互异元素的集合S和一个正整数k≤n,该算法能够确定S中最接近中位数的k个元素。文心一言:要设计一个O(n)时间的算法来找到集合S中最接近中位数的k个元素,我们可以使用快速选择算法(QuickSelect)。该算法基于快速排......
  • 文心一言 VS 讯飞星火 VS chatgpt (101)-- 算法导论9.3 7题
    七、用go语言,设计一个O(n)时间的算法,对于一个给定的包含n个互异元素的集合S和一个正整数k≤n,该算法能够确定S中最接近中位数的k个元素。文心一言:要设计一个O(n)时间的算法来找到集合S中最接近中位数的k个元素,我们可以使用快速选择算法(QuickSelect)。该算法基于快速排序的......
  • P6344 [CCO2017] Vera 与现代艺术 题解
    在\(V\timesV\)的平面上,\(n\)次修改,每次给定\(x,y,v\),令\(a,b\)为不超过\(x,y\)的最大的\(2\)的整数次幂,则所有\((x+pa,y+qb)(p,q为自然数)\)都加上\(v\),最后有\(m\)次单点询问一个位置的值。\(1\lex,y,V\le10^{18},1\lev,n,m\le2\times10^5\)我们可以......
  • P4099 [HEOI2013] SAO
    原题今天我刚知道一个很逆天的事:\(DAG\)的拓扑序方案数不可做!!!,目前能做到的最优方法好像是状压我们考虑这题怎么做,对于一个限制,我们关心的是他俩在拓扑序中的相对排名,而这题恰好是一个树形结构,因此我们考虑树形\(dp\)我们设\(dp_{i,j}\)表示以\(i\)为根的子树,\(i\)在拓......
  • NOI2015酱油记
    这么一想我好像破掉了两个flag。。。一个是Ag的flag……(Wc、Ctsc、Apio都是Ag另一个是二试被翻的flag……(NOIP,省选,Ctsc,各种二试被####DAY-1报到日从长春坐一晚上火车到北京然后坐高铁到杭州。。。一下车一股热气真爽~下了车看到好多人……黄学长居然和我们一趟线?黄学长:......
  • 移动应用的构件—[译]2011年移动开发者经济学报告(七)
    如何利用平台特性第三部分移动应用的构件掌握移动开发移动开发的掌握主要通过时间和精力投入,投入多寡取决于所学的平台,不同平台不一样。Android和QT(注:原文如此,右图中黑莓以微弱优势取胜QT)是最容易学习的平台,受访者平均不到6个月就可以掌握。相反,JavaME和Symbian是最难学的平台,平......
  • Buuctf——[GXYCTF2019]BabySQli
    本题目是一道联合注入进入页面后发现只有一个登录框。知识点unionselect联合查询union拼接的两个查询语句查询字段数必须一样多当其中一个查询结果为空时,不影响另外一个语句的查询结果联合注入核心是使用拼接的select语句同时使原查询语句结果为空来覆盖原查询结果,从而实......
  • CS101-计算机科学基础名词解释
    Turingmachine:图灵机理论上可以计算任何东西CPU(CenterProcessUnit):中央处理器是现代电脑的“大脑”,其中包含数十亿细小开关的硅片,即晶体管Transistors:晶体管每个开关代表一个“位”Bit:位是电脑能够识别的最小信息Byte:字节每8个位一组,称为一个字节ASCI......
  • 【SqlServer系列】001、SELECT语句
     SELECT语句 1、 1基本的select语句1、1、1从表中选择列selecta,bfromtable1、 1、2选择所有列select*fromtable  1、 2 where子句1、2、1 null值注意: 在搜索条件中有null数据时可能会出现unknown值。null值不同于空白或0,只表示值未知。并......