草庐IT

缓存 缓存驱逐策略总结

前言缓存是提升性能的通用方法,现在大多数的缓存实现都使用了经典的技术。当读多写少的情况时,通常会使用缓存来提升获取数据的性能。使用缓存的方式大概有Reids、MemoryCahce、Memcached、Dictionary等等方式来实现自己的缓存,使用缓存时可能考虑最多的时如何存储数据,而不是考虑如何淘汰数据,一般希望缓存可以命中所有的请求,在必要时候再请求底层数据,来提高性能。但是缓存数据也有存储成本,如果存储所有数据,需要在存储上付出很多成本。在操作系统,数据库等领域中,我们会经常使用到驱逐策略算法(换出调度算法)来实现数据页面在主存与磁盘之间频繁的交换。CPUL1,L2......缓存中

缓存 缓存驱逐策略总结

前言缓存是提升性能的通用方法,现在大多数的缓存实现都使用了经典的技术。当读多写少的情况时,通常会使用缓存来提升获取数据的性能。使用缓存的方式大概有Reids、MemoryCahce、Memcached、Dictionary等等方式来实现自己的缓存,使用缓存时可能考虑最多的时如何存储数据,而不是考虑如何淘汰数据,一般希望缓存可以命中所有的请求,在必要时候再请求底层数据,来提高性能。但是缓存数据也有存储成本,如果存储所有数据,需要在存储上付出很多成本。在操作系统,数据库等领域中,我们会经常使用到驱逐策略算法(换出调度算法)来实现数据页面在主存与磁盘之间频繁的交换。CPUL1,L2......缓存中

golang中的GPM(用户态的线程池)

 全局队列(GlobalQueue):存放等待运行的G。P的本地队列:同全局队列类似,存放的也是等待运行的G,存的数量有限,不超过256个。新建G’时,G’优先加入到P的本地队列,如果队列满了,则会把本地队列中一半的G移动到全局队列。P列表:所有的P都在程序启动时创建,并保存在数组中,最多有GOMAXPROCS(可配置)个。M:线程想运行任务就得获取P,从P的本地队列获取G,P队列为空时,M也会尝试从全局队列拿一批G放到P的本地队列,或从其他P的本地队列偷一半放到自己P的本地队列。M运行G,G执行之后,M会从P获取下一个G,不断重复下去。GO和C#的区别在于,GO将池化数据作用于用户空间,一个

golang中的垃圾回收

golang中也使用分代概念分配内容,同样也是用标记清除算法做垃圾回收。tiny:sizesmall:haspointer(scan)||(size>=16bytes&&sizelarge:size>32KBgolang最新的垃圾回收中标记算法优化了挂起线程的算法,作为云原生语言,就是挂起几毫秒也是无法容忍的,最新的标记算法中引入了所谓的“三色标记法”来优化STW问题。三色标记法第一步:新创建的对象都是白色第二步:从rootObject开始遍历,经过的对象:A、C、D、B变为灰色第三步:遍历灰色对象应用的对象,从白色变为灰色,同时将之前灰色的对象变成黑色第四步:重复第三步,直到没有灰色对象第五

golang中的GPM(用户态的线程池)

 全局队列(GlobalQueue):存放等待运行的G。P的本地队列:同全局队列类似,存放的也是等待运行的G,存的数量有限,不超过256个。新建G’时,G’优先加入到P的本地队列,如果队列满了,则会把本地队列中一半的G移动到全局队列。P列表:所有的P都在程序启动时创建,并保存在数组中,最多有GOMAXPROCS(可配置)个。M:线程想运行任务就得获取P,从P的本地队列获取G,P队列为空时,M也会尝试从全局队列拿一批G放到P的本地队列,或从其他P的本地队列偷一半放到自己P的本地队列。M运行G,G执行之后,M会从P获取下一个G,不断重复下去。GO和C#的区别在于,GO将池化数据作用于用户空间,一个

golang中的垃圾回收

golang中也使用分代概念分配内容,同样也是用标记清除算法做垃圾回收。tiny:sizesmall:haspointer(scan)||(size>=16bytes&&sizelarge:size>32KBgolang最新的垃圾回收中标记算法优化了挂起线程的算法,作为云原生语言,就是挂起几毫秒也是无法容忍的,最新的标记算法中引入了所谓的“三色标记法”来优化STW问题。三色标记法第一步:新创建的对象都是白色第二步:从rootObject开始遍历,经过的对象:A、C、D、B变为灰色第三步:遍历灰色对象应用的对象,从白色变为灰色,同时将之前灰色的对象变成黑色第四步:重复第三步,直到没有灰色对象第五

使用golang+antlr4构建一个自己的语言解析器(一)

Antlr4简介ANTLR(全名:ANotherToolforLanguageRecognition)是基于LL(*)算法实现的语法解析器生成器(parsergenerator),用Java语言编写,使用自上而下(top-down)的递归下降LL剖析器方法。由旧金山大学的TerenceParr博士等人于1989年开始发展。antlr4是一款强大的语法分析器生成工具,可用于读取、处理、执行和翻译结构化的文本或二进制文件。它被广泛的应用于学术领域和工业生产实践,是众多语言、工具和框架的基石。Twitter搜索使用antlr进行语法分析,hadoop生态系统中的Hive、Pig、数据仓库和分析系统所

使用golang+antlr4构建一个自己的语言解析器(一)

Antlr4简介ANTLR(全名:ANotherToolforLanguageRecognition)是基于LL(*)算法实现的语法解析器生成器(parsergenerator),用Java语言编写,使用自上而下(top-down)的递归下降LL剖析器方法。由旧金山大学的TerenceParr博士等人于1989年开始发展。antlr4是一款强大的语法分析器生成工具,可用于读取、处理、执行和翻译结构化的文本或二进制文件。它被广泛的应用于学术领域和工业生产实践,是众多语言、工具和框架的基石。Twitter搜索使用antlr进行语法分析,hadoop生态系统中的Hive、Pig、数据仓库和分析系统所