摘要: map主要由连个数据结构实现,hmap+bmap,hmap是map的整体描述信息,相当于头节点,包含了bmap的地址,bmap是真正存储数据的地方,一个bucket可以存8个k-v,当超过8个k-v后,会用拉链法生成溢出bucket,bmap本身是连续的内存数组。 查找过程:先根据hash函数和ha 阅读全文
posted @ 2022-03-08 15:21 hugeQAQ 阅读(54) 评论(0) 推荐(0) 编辑
摘要: type Context interface { Deadline() (deadline time.Time, ok bool) Done() <-chan struct{} Err() error Value(key interface{}) interface{} } context顾名思义为 阅读全文
posted @ 2022-03-08 14:46 hugeQAQ 阅读(23) 评论(0) 推荐(0) 编辑
摘要: todo 阅读全文
posted @ 2022-03-07 22:57 hugeQAQ 阅读(64) 评论(0) 推荐(0) 编辑
摘要: go语言的内存分配不是每次都触发系统调用,go程序运行开始,先向操作系统申请一块较大的内存空间,然后由go在运行时分配 go内存分配的基本单元的mspan,为了减少内存碎片,go有67种大小的mspan,给对象分配最接近的mspan GPM模型中,每个P有一块本地内存mcache,小对象直接从mca 阅读全文
posted @ 2022-03-07 22:55 hugeQAQ 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 1、什么是GC? 字面意思:垃圾回收,对于已经分配且不再有用的内存进行回收的管理机制或程序 2、为什么要GC? 防止内存溢出(OOM) 3、怎么GC? GO的GC基于标记法,将对象分为三种颜色:黑色(有用对象)、灰色(被引用对象,不知道还有没有其他依赖对象)、白色(不被引用对象,需要被回收)。 GC 阅读全文
posted @ 2022-03-07 22:42 hugeQAQ 阅读(187) 评论(0) 推荐(0) 编辑
摘要: PHP底层是由HashTable+Bucket实现 HashTable typedef struct HashTable{ uint nTableSize; //哈希表的大小 uint nTableMask; //哈希表掩码,用以矫正过长的哈希值 ulong nNumOfElements; //记录 阅读全文
posted @ 2022-03-03 23:31 hugeQAQ 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 1、swoole运行模型 1、main reactor 线程 处理客户端链接,并均匀分配给reactor 2、reactor 线程监听socket事件 3、reactor将监听到的请求发送给manager 4、manager分配woker处理 5、如果有耗时较长的异步任务,woker交给task线程 阅读全文
posted @ 2022-03-03 10:48 hugeQAQ 阅读(71) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2022-03-02 15:49 hugeQAQ 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 一、什么是事务 简单点说,就是一堆sql逻辑排列在一起,要么全部执行,要么都不执行。只有InnoDB存储引擎才支持事务(SHOW ENGINES;) 二、如何开启一个事务 show VARIABLES LIKE '%autocommit%' 查看是否已经开启自动提交,如果为YES,那么每执行一条sq 阅读全文
posted @ 2022-03-01 15:33 hugeQAQ 阅读(25) 评论(0) 推荐(0) 编辑
摘要: 1、什么是mvcc MVCC(Multi-Vesion Concurrency Control),即多版本并发控制,意思就是一条数据有多个版本,查询的时候,通过一系列操作,能够在不加锁的情况下获取到满足事务隔离级别的数据,提高并发。 2、关键概念 readVeiw-读视图 用来描述哪些版本的数据可见 阅读全文
posted @ 2022-03-01 11:42 hugeQAQ 阅读(95) 评论(0) 推荐(0) 编辑