这章比较简单简短,主要介绍了并发数据结构的实现。 总结下的话,实现并发的数据结构,我们需要考虑主要2个点: 正确性。这个毋庸置疑,并发情况操作下,要保证数据的正确性。 性能。并发数据结构的性能其实分两部分 在实现正确性的情况下,结构本身的性能 在线程越来越多(并发越来越高)的情况下,性能下降的程度 从这些点来考虑的话,我们直接总结下这章说道的并发数…
27章罗列了线程的api,所以就略过了 28章主要介绍了Lock 锁,上一章说到了,处理并发下的数据竞争最好的方式,就是使用锁来使得那段临界代码互斥,所以这一章主要介绍了锁。 锁的模型 锁的话,简单的模型其实也就2个功能:加锁、解锁 锁的评估 一般我们评估锁,从3个维度: 基本功能,是否提供了互斥 公平性,是否能提供对于争抢锁之间线程的公平性,也就…
这章主要介绍了线程和并发的概念 并发 并发执行下,我们需要考虑2种情况。 数据竞争 为什么并发下会有数据竞争问题? 比如最朴素的场景,2个线程同时执行i++,最终的结果总是不如预期,实际上,是因为i++本身在执行时是3条汇编指令: mov 0x8049a1c, %eax add $0x1, %eax mov %eax, 0x8049a1c 比如现在…
Ostep First Part 总结
这边对ostep整个第一部分做一个总结。 第一部分主要讲了CPU和内存。总结只记一些核心知识点用于回忆 CPU CPU有限制执行模式,部分指令只有在限制执行模式才可以执行,这也是为什么用户进程必须从用户态切换到内核态,才可以执行I/O等操作。操作系统在boot后从指定位置加载自己进内存时,作为第一个执行的程序,会先获得执行权限,然后再执行用户级别代…
Ostep 23 Complete Virtual Memory Systems
ostep-扩展思考-mysql的B+树与内存页
这边跳过了21章和22章,其中21章主要是粗略的讲了下内存交换到硬盘。22章主要讲的是内存中的页本身的汰换算法。 23章通过分析探讨2套操作系统的内存管理实现,将之前的内容串联起来了 VAX/VMS VAX-11微型计算机架构是在1970年代后期由数字设备公司(DEC)推出的。在微型计算机时代,DEC是计算机行业的重要参与者;不幸的是,一系列糟糕的…
了解完操作系统内存中的页以后,忽然想到了一个知识点,就是mysql的b+树设计,所以简单做下扩展知识。记录一下思考,基本也能覆盖b+树的面试题 b+树页大小 页大小是16kb,因为操作系统默认的内存页大小是4kb或者8kb,16kb选择作为整数倍,整存整取提高性能 b+树层数与存储的数据 b+树一般为3-4层,因为我们参考操作系统多级页…
Laravel to Java-应用灰度迁移策略
生产预发灰度流量方案 Prerequisite 首先我们需要把我们的流量网关从nginx换成apisix 然后我们需要从以前的单套生产环境,增加到两套环境,生产+预发 Then 然后,我们就可以有了这么一个结构图 我们此时有了两套环境,一套预发,一套生产,其中预发的流量通过具体的路由规则配置,目前暂且支持手机号区分。 Advantage 权衡过多种…
读书笔记-中岛敦《山月记》
4月去西藏玩的时候,在去程的火车上把山月记看完了。中岛敦的笔力在叙事方面非常强大,书中的篇章都是通过叙事来展现一个历史故事,或者各地风俗。最能看出笔力的当属2个长篇:《李陵》,《光·风·梦》。对我来说最深刻的我认为是《山月记》。 看这本书的初衷是多年前在网上看到的《山月记》中最有名,也是最吸引人来看这本书的一段话: 因为害怕自己并非明珠而不…
Ostep 20 Paging Smaller Tables
18章中遗留的2个问题,转换速度和内存开销,我们在19章中找到了TLB,通过缓存解决这个问题。剩下的就是内存开销,我们在第20章讨论这个问题。 最简单的方式,将页变大 转换页表的数量和虚拟页以及物理页的数量有关。在地址空间长度一定的情况下,页的大小越大,页码使用的bit就更少,自然页码范围就更小了。需要用来表达虚拟页和物理页映射关系的页表也就更小了…
Ostep 19 Faster Translations TLBs
本章主要讨论如何加速页码的转换,即如何快速通过虚拟页码找到物理页 TLB的概念 TLB(translation-lookaside buffer)是处理器芯片上内存管理单元memory-management unit的一部分,本质上是一个对于最近转换关系的一个高速缓存,所以从功能来看其实更贴切的名字是address-translation cach…