吓我一跳?看了线程和线程池的对比,才知道池化技术到底有多牛
情商高的人是能洞察并照顾到身边所有人的情绪 , 而好的文章应该是让所有人都能看懂 。
尼采曾经说过:人们无法理解他没有经历过的事情 。 因此我会试着把技术文章写的尽量具象化一些 , 力求让所有人都能看懂 , 所以在正式开始之前 , 我们先从两个生活事例说起 。
文章插图
唠嗑:之前一直以为尼采是中国的某位圣人 , 大体和庄子差不多 , 后来才知道原来是一位老外 , 惊了个呆 。
生活案例 1早些年间 , 某宝双“11”突然爆火 , 然后无数个男男女女疯狂“剁手” , 然而最痛苦的并不是“剁手”之后吃“灰”的日子 , 而是漫长而又揪心的等待快递小哥的日子 。
文章插图
为了缓解彼此的“痛苦”(快递公司的电话被打爆 , 用户等得不耐烦) , 快递公司后面就变“聪明”了 , 每当购物节将要来临之前 , 快递公司会预先准备好充足的人和车 , 以迎接扑面而来的订单 。
至此 , 当我们再遇到各种购物节 , 就再也不用每天盯着手机煎熬的等待快递小哥了 。
生活案例 2小美是一家公司的 HR , 每年年初是小美最头疼的日子了 。 因为年初有大量的员工离职 , 因此小美需要一边办理离职员工的手续 , 一边疯狂的招人 , 除了这些工作之外 , 小美还要忍受来自各部门和大 BOSS 的间歇性催促 , 这些都让小美痛苦不已 。
于是为了应对每年年初的这种囧境 , 小美也变聪明了 , 她每年年末的时候都会预先招聘一些员工 , 以备来年的不时之需 。
自从用了这招之后(提前招人) , 小美从此过上了幸福的生活 。
文章插图
概念池化技术指的是提前准备一些资源 , 在需要时可以重复使用这些预先准备的资源 。
也就是说池化技术有两个优点:
- 提前创建;
- 重复利用 。
- 根据 new 标识符后面的参数 , 在常量池查找类的符号引用;
- 如果没找到符号应用(类并未加载) , 进行类的加载、解析、初始化等;
- 虚拟机为对象在堆中分配内存 , 并将分配的内存初始化为 0 , 针对对象头 , 建立相应的描述结构(耗时操作:需要查找堆中的空闲区域 , 修改内存分配状态等);
- 调用对象的初始化方法(耗时操作:用户的复杂的逻辑验证等操作 , 如IO、数值计算是否符合规定等) 。
池化技术常见应用常见的池化技术的使用有:线程池、内存池、数据库连接池、HttpClient 连接池等 , 下面分别来看 。
1.线程池线程池的原理很简单 , 类似于操作系统中的缓冲区的概念 。 线程池中会先启动若干数量的线程 , 这些线程都处于睡眠状态 。 当客户端有一个新的请求时 , 就会唤醒线程池中的某一个睡眠的线程 , 让它来处理客户端的这个请求 , 当处理完这个请求之后 , 线程又处于睡眠的状态 。
线程池能很高地提升程序的性能 。 比如有一个省级数据大集中的银行网络中心 , 高峰期每秒的客户端请求并发数超过100 , 如果为每个客户端请求创建一个新的线程的话 , 那耗费的 CPU 时间和内存都是十分惊人的 , 如果采用一个拥有 200 个线程的线程池 , 那将会节约大量的系统资源 , 使得更多的 CPU 时间和内存用来处理实际的商业应用 , 而不是频繁的线程创建和销毁 。
文章插图2.内存池如何更好地管理应用程序内存的使用 , 同时提高内存使用的频率 , 这时值得每一个开发人员深思的问题 。 内存池(Memory Pool)就提供了一个比较可行的解决方案 。
内存池在创建的过程中 , 会预先分配足够大的内存 , 形成一个初步的内存池 。 然后每次用户请求内存的时候 , 就会返回内存池中的一块空闲的内存 , 并将这块内存的标志置为已使用 。 当内存使用完毕释放内存的时候 , 也不是真正地调用 free 或 delete 的过程 , 而是把内存放回内存池的过程 , 且放回的过程要把标志置为空闲 。 最后 , 应用程序结束就会将内存池销毁 , 将内存池中的每一块内存释放 。
- 芯片与光刻机依旧是存在的难题,难道是因为人才都向“钱”看了?
- 两极反转?因华为而兴起,因美颜而落幕,照片不再追求好看了?
- 看了马云任正非雷军一百多个视频,发现一个重大秘密!
- 华为内部控制手册,看了才知道人家为啥那么牛
- 女人|盘点最奇葩手机壳,最后一个女人看了都控制不了自己!
- 性价比|新品Redmi Note9,一亿像素,你看了心动吗?
- 赞同|iPhone12被曝太多槽点为何大家都在买?这四个原因你看了也会赞同
- 串起来使用|为什么销售新人看了几十本书还是不知怎么开展销售工作?
- 看了看iPhone12,iPhoneXS Max还能战两年
- 司机|滴滴推出完单率提醒,网约车司机看了想逃离:真的累了
