摘要: 先贴上原作者的仓库地址:https://github.com/panjf2000/ants 通俗来讲,线程池的存在就是为了实现高并发情况下的线程复用,从而减少内存开销和提升执行速度。 个人认为ants的设计有两个可学习之处:池调度模型和自旋锁。 池模型 检查当前 Worker 队列中是否有可用的 W 阅读全文
posted @ 2022-05-01 17:20 忘语川 阅读(106) 评论(0) 推荐(0) 编辑
摘要: ORM框架实现的是对象到数据库表的映射,对于任意对象的属性解析,反射恰逢其时。 Session 想要对数据库进行操作,我们在连接数据库后可以新建一个对话。在go语言中直接用db对象也是可以的。但经过Session封装后我们可以做更多的事情: Engine可以随时新建Session,进行并发。 Ses 阅读全文
posted @ 2022-02-24 11:20 忘语川 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 首先我们来归结分布式缓存的主要组成: 分布式,每个结点自身能提供缓存服务,也能向其他节点请求服务。 缓存,缓存的策略众多,GeeCache采用的是LRU策略。 缓存 LRU 核心是两个数据结构,字典和双向链表。其中,字典存储键和值的映射关系,查找对应值的复杂度为O(1)。然后具体存储值的是双向链表, 阅读全文
posted @ 2022-02-20 11:49 忘语川 阅读(556) 评论(0) 推荐(1) 编辑
摘要: 框架的意义在于,封装大部分手工操作的功能,提升开发效率。 引擎封装 Gee框架模仿Gin,于是我们整体构造一个Web引擎类Engine。如果直接使用基础库http,启动整个Web应用依赖以下代码: http.ListenAndServe(addr, engine) 使用Engine进行封装: fun 阅读全文
posted @ 2022-02-19 16:58 忘语川 阅读(454) 评论(0) 推荐(0) 编辑
摘要: 本文是mit6.824的lab1实现记录,目前已通过所有test,但终端会有EOF报错,暂时还未排查到错误。 基本架构 MapReduce模型角色有两种:master和worker。master是map和reduce任务的调度者,起码任务调度和请求处理是异步的,所以要考虑多线程。worker是请求并 阅读全文
posted @ 2021-11-18 19:58 忘语川 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 本文是在阅读伯克利大学CS61A项目4源码后的小结,作者将记录以下重点: 文件功能介绍 repl流程分析,即项目基本架构流程 eval: scheme_eval和scheme_apply 文件介绍 scheme.py 主程序入口文件,repl流程实现,Frame(环境)定义,各种Procedure和 阅读全文
posted @ 2021-10-16 20:47 忘语川 阅读(423) 评论(0) 推荐(0) 编辑