欧博博彩网站-uG环球炸金花上分_什么?用@Async会内存溢出?望望你的线程池竖立了没!
你的位置:欧博博彩网站 > 欧博备用网址 > uG环球炸金花上分_什么?用@Async会内存溢出?望望你的线程池竖立了没!
uG环球炸金花上分_什么?用@Async会内存溢出?望望你的线程池竖立了没!
发布日期:2023-10-30 06:10    点击次数:135

uG环球炸金花上分_什么?用@Async会内存溢出?望望你的线程池竖立了没!

uG环球炸金花上分_

[[424482]]

上一篇咱们先容了奈何使用@Async注解来创建异步任务,我不错用这种措施来达成一些并发操作,以加快任务的推行后果。然而,如若仅仅如前文那样径直粗拙的创建来使用,可能也曾会际遇一些问题。存在有什么问题呢?先来想考下,底下的这个接口,通过异步任务加快推行的达成,是否存在问题或风险呢?

@RestController 葡京娱乐百家乐public class HelloController {      @Autowired     private AsyncTasks asyncTasks;              @GetMapping("/hello")     public String hello() {         // 将不错并行的解决逻辑,拆分红三个异步任务同期推行         CompletableFuture<String> task1 = asyncTasks.doTaskOne();         CompletableFuture<String> task2 = asyncTasks.doTaskTwo();         CompletableFuture<String> task3 = asyncTasks.doTaskThree();                  CompletableFuture.allOf(task1, task2, task3).join();         return "Hello World";     } } 

诚然,从单次接口调用来说,是莫得问题的。但当接口被客户端深广调用的时候,异步任务的数目就会多半增长:3 x n(n为请求数目),如若任务解决不够快,就很可能会出现内存溢出的情况。那么为什么会内存溢出呢?根底原因是由于Spring Boot默许用于异步任务的线程池是这么竖立的:

考虑到爱心伞放在公交车上取用方便,因此,在伞的设计上特别选了长柄的轻便伞。此外,伞的颜色也是独家调制的橙红色,希望为游客带去红心般的暖意,并且展示杭州的现代活力。

上分

图中我标出的两个痛苦参数是需要包涵的:

韧性 queueCapacity:缓冲队伍的容量,默许为INT的最大值(2的31次方-1)。 maxSize:允许的最大线程数,默许为INT的最大值(2的31次方-1)。

是以,默许情况下,一般任务队伍就可能把内存给堆满了。是以,咱们真确使用的时候,还需要对异步任务的推行线程池作念一些基础竖立,以防护出现内存溢出导致就业不成用的问题。

竖立默许线程池

太阳城周焯华皇冠客服飞机:@seo3687

默许线程池的竖立很粗拙,只需要在竖立文献中完成即可,主要有以下这些参数:

皇冠体育博彩网
spring.task.execution.pool.core-size=2 spring.task.execution.pool.max-size=5 spring.task.execution.pool.queue-capacity=10 spring.task.execution.pool.keep-alive=60s spring.task.execution.pool.allow-core-thread-timeout=true spring.task.execution.shutdown.await-termination=false spring.task.execution.shutdown.await-termination-period= spring.task.execution.thread-name-prefix=task- 

具体竖立含义如下:

spring.task.execution.pool.core-size:线程池创建时的出手化线程数,默许为8 spring.task.execution.pool.max-size:线程池的最大线程数,默许为int最大值 spring.task.execution.pool.queue-capacity:用来缓冲推行任务的队伍,默许为int最大值 spring.task.execution.pool.keep-alive:线程休止前允许保抓悠然的工夫 spring.task.execution.pool.allow-core-thread-timeout:是否允许中枢线程超时 spring.task.execution.shutdown.await-termination:是否恭候剩余任务完成后才关闭愚弄 spring.task.execution.shutdown.await-termination-period:恭候剩余任务完成的最大工夫 spring.task.execution.thread-name-prefix:线程名的前缀,缔造好了之后不错陋劣咱们在日记中检察解决任务地点的线程池 出手试一试

咱们径直基于之前chapter7-5的遏抑来进行如下操作。

ug环球直营网

皇冠体育

最初,欧博百家乐注册在莫得进行线程池竖立之前,不错先推行一下单位测试:

@Test public void test1() throws Exception {     long start = System.currentTimeMillis();      CompletableFuture<String> task1 = asyncTasks.doTaskOne();     CompletableFuture<String> task2 = asyncTasks.doTaskTwo();     CompletableFuture<String> task3 = asyncTasks.doTaskThree();      CompletableFuture.allOf(task1, task2, task3).join();      long end = System.currentTimeMillis();      log.info("任务一起完成,总耗时:" + (end - start) + "毫秒"); } 

由于默许线程池的中枢线程数是8,是以3个任务会同期出手推行,日记输出是这么的:

环球体育入口
2021-09-15 00:30:14.819  INFO 77614 --- [         task-2] com.didispace.chapter76.AsyncTasks       : 出手作念任务二 2021-09-15 00:30:14.819  INFO 77614 --- [         task-3] com.didispace.chapter76.AsyncTasks       : 出手作念任务三 2021-09-15 00:30:14.819  INFO 77614 --- [         task-1] com.didispace.chapter76.AsyncTasks       : 出手作念任务一 2021-09-15 00:30:15.491  INFO 77614 --- [         task-2] com.didispace.chapter76.AsyncTasks       : 完成任务二,耗时:672毫秒 2021-09-15 00:30:19.496  INFO 77614 --- [         task-3] com.didispace.chapter76.AsyncTasks       : 完成任务三,耗时:4677毫秒 2021-09-15 00:30:20.443  INFO 77614 --- [         task-1] com.didispace.chapter76.AsyncTasks       : 完成任务一,耗时:5624毫秒 2021-09-15 00:30:20.443  INFO 77614 --- [           main] c.d.chapter76.Chapter76ApplicationTests  : 任务一起完成,总耗时:5653毫秒 

接着,不错尝试在竖立文献中增多如下的线程池竖立

spring.task.execution.pool.core-size=2 spring.task.execution.pool.max-size=5 spring.task.execution.pool.queue-capacity=10 spring.task.execution.pool.keep-alive=60s spring.task.execution.pool.allow-core-thread-timeout=true spring.task.execution.thread-name-prefix=task- 

日记输出的法例会造成如下的法例:

2021-09-15 00:31:50.013  INFO 77985 --- [         task-1] com.didispace.chapter76.AsyncTasks       : 出手作念任务一 2021-09-15 00:31:50.013  INFO 77985 --- [         task-2] com.didispace.chapter76.AsyncTasks       : 出手作念任务二 2021-09-15 00:31:52.452  INFO 77985 --- [         task-1] com.didispace.chapter76.AsyncTasks       : 完成任务一,耗时:2439毫秒 2021-09-15 00:31:52.452  INFO 77985 --- [         task-1] com.didispace.chapter76.AsyncTasks       : 出手作念任务三 2021-09-15 00:31:55.880  INFO 77985 --- [         task-2] com.didispace.chapter76.AsyncTasks       : 完成任务二,耗时:5867毫秒 2021-09-15 00:32:00.346  INFO 77985 --- [         task-1] com.didispace.chapter76.AsyncTasks       : 完成任务三,耗时:7894毫秒 2021-09-15 00:32:00.347  INFO 77985 --- [           main] c.d.chapter76.Chapter76ApplicationTests  : 任务一起完成,总耗时:10363毫秒 
任务一和任务二会赶快占用中枢线程,任务三参预队伍恭候 任务一完成,开释出一个中枢线程,任务三从队伍中移出,并占用中枢线程出手解决

 

小心:这里可能有的小伙伴会问,最大线程不是5么,为什么任务三是进缓冲队伍,不是创建新线程来解决吗?这里要团结缓冲队伍与最大线程间的关连:唯有在缓冲队伍满了之后才会肯求逾越中枢线程数的线程来进行解决。是以,这里唯有缓冲队伍中10个任务满了,再来第11个任务的时候,才会在线程池中创建第三个线程来解决。这个这里就不具体写列子了,读者不错我方养息下参数,冒昧养息下单位测试来考据这个逻辑。

皇冠博彩平台您值得信赖博彩选择,提供多样化博彩游戏赛事直播,全面、优质博彩攻略技巧分享,您博彩游戏中尽情享受乐趣收益。平台操作简便,充值提款方便快捷,您打造最佳博彩体验最高博彩收益。皇冠新款2022

 



相关资讯