摘要: 三次握手的原因 TCP是双工的,所以对于IP层面上的TCP内核协议栈需要确认两件事情 我是否可以写 我是否可以读 从上图来看 1 2 完成之后 ,client 可以确认自己是可以写的,也可以确认自己是可以读的,但是server 只能确认自己是可以读的,server并不知道它是可以写的, 接下来第3步 阅读全文
posted @ 2021-02-01 21:24 Richard_Winters 阅读(33) 评论(0) 推荐(0) 编辑
摘要: Java字节码与X86汇编的对比 相同之处 Java字节码解释运行时与X86汇编一样,都使用了函数栈幁模型 具体参考我之前的博文 如何在用户态完成一次上下文切换 里面有对X86函数栈幁模型有一个较为简单的介绍 字节码跟X86汇编均提供程序流程结构控制,例如Java字节码 提供 条件跳转指令如:if_ 阅读全文
posted @ 2021-01-22 11:36 Richard_Winters 阅读(305) 评论(0) 推荐(0) 编辑
摘要: 为什么各个语言都会有这么多的依赖问题? 软件包的分发规模产生了巨大的变化 大部分主流编程语言都诞生于上个世纪,代码包的分发范围在当时仅限于小规模的团体,例如公司内部或者单个软件项目内部,这种分发规模 只要内部有良好的代码约定就不会导致模块依赖冲突,但今天我们已经广泛运用github社区来分发软件代码 阅读全文
posted @ 2021-01-21 21:59 Richard_Winters 阅读(592) 评论(0) 推荐(0) 编辑
摘要: 单线程的as-if-serial语义 关于指令重排序有个问题不明白的一个问题 int a = 2; int c = 1 + a; float b = 3f / 2f; 举个栗子,从CPU的设计者以及编译器的设计者角度来看,上面第3行代码完全可以放到第1行代码之前运行,且不会影响程序的正确性(as-i 阅读全文
posted @ 2021-01-19 00:30 Richard_Winters 阅读(41) 评论(0) 推荐(0) 编辑
摘要: ThreadLocal & WeakReference Thread整体的模块图 Thread → ThreadLocalMap 对于继承了 WeakReference Entry本身引用是强引用,Entry本身是作为 key存在的,这一点与上图不同,网上类似的文章有大量的雷同的截图.. 其实是误导 阅读全文
posted @ 2021-01-17 21:49 Richard_Winters 阅读(132) 评论(0) 推荐(0) 编辑
摘要: X64栈幁结构 X64总体的栈幁总体如下图 GCC没有优化的情况下的反编译 栈幁模型详述 在线反汇编地址 读者通过上图观察可以看到函数的第一个参数放在RDI寄存器,第二个参数放在RSI寄存器 ... 后续参数放在何处,相关调用约定可以查看AMD 64 调用约定 读者从上图可以看出 ,在汇编层面上,由 阅读全文
posted @ 2021-01-14 21:35 Richard_Winters 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 记录几个坑 优化器在表行数比较少的时候 会使用全表扫描,会造成全表所有的行加锁,所以需要使用force index 强制使用索引 来实现gap-lock(间隙锁)的应用 next-lock 加锁 会锁住 第一个不满足条件行 例如下表 number有唯一索引 id name number 1 Jack 阅读全文
posted @ 2021-01-10 16:11 Richard_Winters 阅读(55) 评论(0) 推荐(0) 编辑
摘要: JMM在X86下的原理与实现 Java的happen-before模型 众所周知 Java有一个happen-before模型,可以帮助程序员隔离各个平台多线程并发的复杂性,只要Java程序员遵守happen-before模型就不用担心多线程内存排序或者缓存可见性的问题 摘自周志明老师的JMM章节 阅读全文
posted @ 2021-01-05 21:01 Richard_Winters 阅读(210) 评论(0) 推荐(0) 编辑