Below you will find pages that utilize the taxonomy term “go”
Go channel实现原理
channel是Go定义的一个数据类型,用于goroutine之间的通信且是并发安全,正是Go所提倡的利用通信来共享内存。 Go在语言层面支持这种数据通信,提供非
Go GPM 模型
线程与goroutine goroutine属于用户态线程;传统线程是属于内核态线程,由操作系统调度。 下面主要从内存占用,上下文切换两个角度描述: 线程 线程是操作系
Go 实现群聊天室- goroutine 和 channel 应用
经典的多线程程序群聊聊天室,利用goroutine和channel来实现。 实现这段程序,对理解go的goroutine和channel也非常有帮助。 服务端代码:
Go 并发设计思路--非阻塞缓存
Go开发中经常遇到并发设计的场景,伴随着一个绕不过的问题就是并发安全。 并发安全设计几种方式 提前加载好 利用锁 把对共享变量的读写收敛到一个goroutine里,利用
理解Go并发的一个经典例子
通过这个案例,我们一步步理解并发的一些知识点: channel作为多个goroutine的通信媒介 select的用法 组等待,waitgroup的用法 限制并发度 广播
笔记- Go context
context包在Go并发编程代码中经常可见,而在我学习Go的两本书中《Go圣经》《Go实战》都没有看到这个包的介绍,才知道是Go1.7版本中才将其放入到标准库
笔记-Go defer 调试复杂函数
随着函数变得复杂,需要处理的错误也变多,维护清理逻辑变得越来越困难。而Go语言独有的 defer 机制可以让事情变得简单。 defer的用法 当defer语句被执行时,跟在de
笔记-Go sync.Map 源码实现
以下源码是Go 1.11版本,源码v1.11 github 简单实现 Map本身不是并发安全,如果设计一个简单的并发安全map,我们可以定一个结构体,map+读写锁 type syncMap struct{ lock sync.RWMutex m map[interface{}]interface{}
笔记-Go unsafe 包
只要阅读Go的源码,就不会错过代码里众多的unsafe.Pointer等,这个不安全的指针是个啥? unsafe.Pointer unsafe.Pointer 可以指向任意类型的指针,这有点类似于C里的void*。它能
笔记-Go 作用域和生命周期
作用域和生命周期,往往被混为一谈,当然是两个概念。 概念 作用域 作用域是声明在程序文本中出现的区域,是一个编译时属性。 变量的生命周期 变量的生命周期是程序执行期间被程
笔记-Go 利用 buffer channel 做一个资源池
Go可以利用buffer channel做一个资源池,channel中元素是资源类型,比如实现io.Closer的资源。 资源池要有哪几个功能? 创建一个池 从池中取一
笔记-Go 限制并发、限速
Go的并发使用起来非常容易,随意就起个goroutine。但是日常开发中,考虑到机器CPU、内存、文件描述符、网络以及下游中间件性能等等的影响,通常不会无脑使用
算法-LRU
LRU介绍 LRU(Least Recently Used)最近最少使用算法,通常在缓存策略中使用。操作系统在内存管理中,对页的置换有应用这一算法。 通常缓存空间有限,因此当空间满的