ThreadPoolExecutor运转机制

public ThreadPoolExecutor(int corePoolSize,  
                          int maximumPoolSize,  
                          long keepAliveTime,  
                          TimeUnit unit,  
                          BlockingQueue<Runnable> workQueue,  
                          ThreadFactory threadFactory,  
                          RejectedExecutionHandler handler)

具体流程如下:

1)当池子大小小于corePoolSize就新建线程,并处理请求

2)当池子大小等于corePoolSize,把请求放入workQueue中,池子里的空闲线程就去从workQueue中取任务并处理

3)当workQueue放不下新入的任务时,新建线程入池,并处理请求,如果池子大小撑到了maximumPoolSize就用RejectedExecutionHandler来做拒绝处理

4)另外,当池子的线程数大于corePoolSize的时候,多余的线程会等待keepAliveTime长的时间,如果无请求可处理就自行销毁

1、BlockingQueue 只是一个接口,常用的实现类有 LinkedBlockingQueue 和 ArrayBlockingQueue。用 LinkedBlockingQueue 的好处在于没有大小限制。这样的话,因为队列不会满,所以 execute() 不会抛出异常,而线程池中运行的线程数也永远不会超过 corePoolSize 个,keepAliveTime 参数也就没有意义了。

2、shutdown() 方法不会阻塞。调用 shutdown() 方法之后,主线程就马上结束了,而线程池会继续运行直到所有任务执行完才会停止。如果不调用 shutdown() 方法,那么线程池会一直保持下去,以便随时添加新的任务。

 

转载于:https://www.cnblogs.com/jerrice/p/7044744.html

标题基于SpringBoot的蛋糕烘焙分享平台研究AI更换标题第1章引言介绍蛋糕烘焙分享平台的研究背景、意义、现状以及论文的方法和创新点。1.1研究背景与意义分析蛋糕烘焙行业的现状,阐述分享平台的重要性和意义。1.2国内外研究现状综述国内外在蛋糕烘焙分享平台方面的研究进展。1.3论文方法及创新点概述论文的研究方法,突出创新点。第2章相关理论介绍SpringBoot框架和分享平台开发的相关理论。2.1SpringBoot框架概述简述SpringBoot框架的特点、优势和应用场景。2.2分享平台技术基础阐述分享平台开发所需的技术基础,如前后端分离、数据库设计等。2.3用户行为分析理论介绍用户行为分析的基本理论和方法,为平台功能设计提供指导。第3章平台需求分析对蛋糕烘焙分享平台进行需求分析,明确平台功能和性能要求。3.1目标用户群体分析分析平台的目标用户群体,了解其需求和特点。3.2功能需求分析详细分析平台应具备的功能,如用户注册、烘焙教程发布、互动交流等。3.3性能需求分析对平台的性能要求进行分析,确保平台的稳定性和可扩展性。第4章平台设计根据需求分析结果,设计蛋糕烘焙分享平台的整体架构和详细功能。4.1平台架构设计设计平台的整体架构,包括前后端分离、数据库设计等。4.2功能模块设计详细设计平台的功能模块,如用户管理、内容管理、互动交流模块等。4.3数据库设计根据平台需求,设计合理的数据库表结构和数据字典。第5章平台实现与测试介绍平台的实现过程,包括环境搭建、编码实现和测试等环节。5.1环境搭建与配置搭建开发环境,配置必要的软件和工具。5.2编码实现按照设计要求,编写平台的前后端代码。5.3平台测试与优化对平台进行测试,发现并解决问题,优化平台性能。第6章结论与展望总结论文的研究成果,展望未来的研究方向和应用前景。6.1研究结论概括论文的主要研究内容和取得的成果。6.2未来研究
### Redis 线程模型概述 Redis 的线程模型经历了从单线程到部分多线程的发展过程。早期版本中,Redis 主要依赖于单线程架构来处理所有的操作,而自 Redis 6.0 版本起,则引入了多线程支持以提升特定场景下的性能。 #### 单线程工作原理 在单线程模式下,Redis 使用事件循环机制来管理客户端连接、命令执行以及持久化等任务。这种设计使得所有操作都在同一个进程中顺序完成,从而简化了程序逻辑并减少了竞争条件的发生概率[^1]。 具体来说: - **事件驱动**:通过 epoll 或 kqueue 实现高效的 I/O 复用; - **命令排队**:当有新的请求到来时会被加入队列等待被处理; - **串行执行**:每次仅有一个命令被执行,确保原子性和一致性。 由于大多数情况下 Redis 的瓶颈并不在于 CPU 计算能力而是内存访问速度或磁盘 I/O 效率,因此即使是在高负载环境下也能够保持良好的响应时间[^3]。 然而,面对某些特殊情况如大键(big key)的操作或是网络延迟较大的情况,单线程可能会成为性能瓶颈之一[^5]。 ```python import redis client = redis.Redis(host='localhost', port=6379) def single_threaded_operation(): client.set('foo', 'bar') value = client.get('foo') print(value.decode()) ``` #### 部分多线程的工作方式 到了 Redis 6.0 及以后的版本,为了应对日益增长的数据量和更高的吞吐需求,官方团队决定对原有的单线程结构做出调整,在保留原有优势的基础上增加了多线程的支持[^4]。 新特性主要表现在以下几个方面: - **I/O 多线程**:利用多个辅助线程专门负责接收来自不同客户端的消息包,并将其转换成内部可以识别的形式后再交给主线程进一步处理; - **后台任务异步化**:像 AOF 日志重写这样的耗时较长的任务也可以由独立的工作进程承担而不影响前台业务正常运转; - **文件描述符分配优化**:改进后的算法允许更加灵活地控制资源配给,提高了整体稳定性与可靠性。 值得注意的是,尽管引入了一定程度上的并发性,但对于具体的数据库读取/修改指令而言依旧维持着原来的同步调用链路不变,即仍然遵循先来后到的原则依次进行解析计算[^2]。 ```python from concurrent.futures import ThreadPoolExecutor, as_completed executor = ThreadPoolExecutor(max_workers=8) futures = [] for i in range(10): futures.append(executor.submit(client.incr, f'counter_{i}')) results = [future.result() for future in as_completed(futures)] print(results) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值