golang
文章平均质量分 61
uncle_Y
在技术的道路上艰难前行
展开
-
Golang Cond同步机制
Golang Cond同步机制条件变量是构建在一个基础锁上的同步原语,Golang Crondition位于sync包中,用于goroutine需要关注特定的条件的场景。 Cond 模块定义:type Cond struct { noCopy noCopy // L is held while observing or changing the condition...原创 2018-07-23 20:37:25 · 5367 阅读 · 4 评论 -
Golang init函数
函数特性init函数作为Go的两个保留函数之一(另一个是main函数)有很多特殊性: - init函数没有入参和返回值 - init函数不能被显式调用 - 一个package中可以包含多个init函数 - 一个go文件中可以包含多个init函数何时调用程序的初始化都从main函数开始,如果main引入了其他package,在编译的时候就会将他们依次导入。初始化是在一个gor...原创 2018-07-27 12:11:13 · 3138 阅读 · 4 评论 -
golang-lru Cache (一)LRU
简介Golang 第三方库golang-lru基于双向链表实现了三种LRU及变种Cache:LRU,Q2,ARC。今天看了一下代码,简单优雅,整理一下笔记。双向链表双向链表在golang标准库container/list中实现。定义了两个核心结构体Element和List。Element双向链表的一个节点信息。type Element struct { ...原创 2018-07-31 19:18:20 · 5942 阅读 · 0 评论 -
golang-lru Cache (二)2Q
LRU的问题当存在热点数据时,LRU的效率很好,但偶发性的、周期性的批量操作会导致LRU命中率急剧下降,缓存污染情况比较严重。2Q Cache2Q算法2Q算法有两个缓存队列,一个是FIFO队列,用于保存最近访问的数据;一个是LRU队列,用于保存热点数据。golang-lru实现在golang-lru中,两个队列都是用simplelru实现。type TwoQueueCa...原创 2018-08-10 12:56:16 · 1303 阅读 · 0 评论 -
Golang调度管理笔记--如何保证G不会被其他G的系统调用、网络调用阻塞?
GMP模型系统调用通过syscall,解绑PM,P选择或新建M,重新调度,G状态为syscall,阻塞当前M。系统调用结束后获取PLocal G队列或全局G队列chan阻塞,功能sendq, recvq保存待写入或读取的g,设置状态Waiting。发生读取或接受时通过goready激活G,重新调度netpoll阻塞time阻塞...原创 2019-11-08 18:01:05 · 670 阅读 · 0 评论