摘要: L1 缓存参考 0.5 ns 分支错误预测 5 ns L2 缓存参考 7 ns 互斥锁/解锁 100 ns 主存储器参考 100 ns 磁盘寻道 10ms 压缩1MB数据 10ms 从内存中顺序读取 1 MB 0.25ms 同一数据中心内的往返 0.5ms 从网络顺序读取 1 MB 10ms 从磁盘 阅读全文
posted @ 2023-01-09 15:36 刘皓lh 阅读(45) 评论(0) 推荐(0) 编辑
摘要: SDS 说一下sds是怎么做的? sds保存三个字段,len,free,char数组。length记录char数组的长度,free记录char数组的空闲长度,char数组记录字符串 sds有什么特点? sds通过len和free能在O(1)复杂度获取字符串长度 通过字符串的长度,sds不必通过判断空 阅读全文
posted @ 2023-01-09 15:36 刘皓lh 阅读(21) 评论(0) 推荐(0) 编辑
摘要: 前置知识 了解tomcat nio处理流程之前需要了解一下IO多路复用和Reactor模型。下图是主从Reactor多线程模型的设计图,mainReactor负责接收连接,subReactor负载读写数据,工作线程池负责编解码和计算,tomcat的架构模型和下图类似,但是有点区别。 Tomcat N 阅读全文
posted @ 2021-04-18 17:14 刘皓lh 阅读(465) 评论(0) 推荐(0) 编辑
摘要: 整体架构 整体上分为两部分,连接器和容器。连接器也就是Connector,负责建立连接和处理IO请求。Engine是最上层容器,容器之间通过管道相连,最终找到对应我们定义的Servlet执行业务代码 connector 如何处理请求 Acceptor用于接收连接,Processor用于解析http请 阅读全文
posted @ 2021-04-11 16:01 刘皓lh 阅读(32) 评论(0) 推荐(0) 编辑
摘要: 前言 关于什么是nacos可以去nacos官网看一下 https://nacos.io/zh-cn/docs/what-is-nacos.html,这篇文章的重点描述在nacos是如何实现动态配置的。 重要概念 官方概念 nameSpace:命名空间,主要应用场景是区分线上测试环境。 group:代 阅读全文
posted @ 2021-01-24 20:52 刘皓lh 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 前言 Collections#sort 追踪代码进去看,会调用到Arrays.sort,看到这里时,你肯定会想,这不是很简单,Arrays.sort在元素较少时使用插入排序,较多时使用快速排序,更多时使用归并排序,不过我要告诉你,这句话有一个前提,那就是针对基本类型排序时,是按照这个顺序,而 Col 阅读全文
posted @ 2020-05-24 22:24 刘皓lh 阅读(599) 评论(0) 推荐(0) 编辑
摘要: 前言 tomcat是常用的Web 应用服务器,目前国内有很多文章讲解了tomcat架构,请求流程等,但是没有如何解析http请求及如何解决TCP粘包拆包,所以这篇文章的目的就是介绍这块内容,一下内容完全是个人查看tomcat nio 相关源码来总结的,源码版本9.0.30,欢迎提问,欢迎指出错误。 阅读全文
posted @ 2020-03-16 23:28 刘皓lh 阅读(2415) 评论(0) 推荐(0) 编辑
摘要: 前言 RateLimiter是基于令牌桶算法实现的一个多线程限流器,它可以将请求均匀的进行处理,当然他并不是一个分布式限流器,只是对单机进行限流。它可以应用在定时拉取接口数据, 预防单机过大流量使用。 原理 首先先讲一下令牌桶的原理,每隔一段时间生产一个令牌放入桶里,请求在执行时需要拿到令牌才可以执 阅读全文
posted @ 2019-11-01 16:35 刘皓lh 阅读(3178) 评论(0) 推荐(0) 编辑
摘要: 前言 java8新特性目前使用非常广泛,其中Stream更是最常用的特性,这篇文章将介绍Stream的原理,如果你现在还不怎么会用的话可以看一下菜鸟教 https://www.runoob.com/java/java8-streams.html,或者我的博客https://www.runoob.co 阅读全文
posted @ 2019-09-15 14:41 刘皓lh 阅读(350) 评论(0) 推荐(0) 编辑
摘要: 1.前言 相信很多人了解到FutureTask是因为ThreadPoolExecutor.submit方法,根据ThreadPoolExecutor.submit的使用,我们可以先猜一下FutureTask的原理。 上面这个代码会在启动后三秒打印出1,FutureTask.get()方法调用时会直到 阅读全文
posted @ 2019-08-11 19:16 刘皓lh 阅读(422) 评论(0) 推荐(0) 编辑