JAVA池化
缓冲池
设计要点:包含三个队列:空缓冲队列(emq),装满输入数据的输入的队列(inq),装满输出数据的输出队列(outq),输入程序包括收容输入(hin),提取输入(sin),输出程序包括收容输出(hout)和提取输出(sout)。
注意点:输入程序和输出程序会对缓冲区并发访问,因此可以对缓冲区设置一个互斥信号量,或者对关于缓冲区的操作加锁。hin,sin,hout,sout之间还有同步关系,可以通过if语句判断决定执行先后顺序
线程池
设计要点:线程池和线程一样,也具有最基本的就绪,运行,结束,等状态。ThreadPoolService类包含state,ThreadCount,一个线程容器,一个任务容器等成员变量,初始化时在线程容器中添加一定数目的线程(线程的初始化传入一个this参数,说明他属于的线程池),对于每个线程,run方法内获得任务容器,如果容器中含有就绪的任务,就执行它,即该任务占用了该线程,线程采用轮询(或者其他设计)的方式,执行task,
注意点:线程,任务容器都会并发访问任务(改变任务的状态),因此对关于任务的操作需要加锁。
连接池
设计要点:ConnectionPool初始化时加入若干个connection,在高层通过getConnection获得容器中的某个connection,若容器中不存在connection就再初始化一个connection(),当不需要数据库操作的时候,传统做法是释放连接,而对于连接池则是在容器中,恢复对该connection的包含
注意点: 连接池存在对connection的并发访问,因此对关于connection的操作应该加锁
对比
相同点:无论是缓冲池,对象池还是连接池,最初的设计初衷都是为了增加系统资源的利用率,是系统开销更多的放在具体的请求处理上而不是对象的建立和释放上,既然都是容器,在类的设计上也有很多相似之处,例如:初始化,成员变量的设计等等。
不同点:所谓的不同点也是在相同点具体细化后产生的,例如互斥,同步信号量的定义,连接,线程,缓冲池的复用策略
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥