随笔分类 -  Go

摘要:close func close(c chan<- Type) close用于关闭一个channel,使用close函数要注意以下几点: 关闭一个只接受的channel会导致错误 在一个已经关闭的channel上发送数据会导致panic 关闭一个nil channel会导致panic 在一个chan 阅读全文
posted @ 2020-03-26 13:09 -零 阅读(1230) 评论(0) 推荐(0) 编辑
摘要:数据服务的分布式模型 分布式系统要求个节点分布在网络上,并通过消息传递合作来完成一个共同的目标。分布式系统的三大关键特征: 节点之间并发工作 没有全局锁 某个节点发生错误不影响其它节点 模型 接口服务层提供对外的REST接口,而数据服务提供对接口服务的REST接口。接口服务接收用户请求,数据服务接收 阅读全文
posted @ 2020-03-19 20:17 -零 阅读(481) 评论(0) 推荐(0) 编辑
摘要:本文来自:CSDN博客 感谢作者:ACHelloWorld 查看原文:Go语言(container介绍) container:容器 | container 可以看出包含三部分:heap,list和ring。下面分别介绍 1. heap heap即为堆,是一种常用的数据结构,在源码里面,提供了接口,在 阅读全文
posted @ 2020-03-15 21:02 -零 阅读(882) 评论(0) 推荐(0) 编辑
摘要:原文链接 前言 事件驱动为广大的程序员所熟悉,其最为人津津乐道的是在图形化界面编程中的应用;事实上,在网络编程中事件驱动也被广泛使用,并大规模部署在高连接数高吞吐量的服务器程序中,如 http 服务器程序、ftp 服务器程序等。相比于传统的网络编程方式,事件驱动能够极大的降低资源占用,增大服务接待能 阅读全文
posted @ 2020-03-05 16:00 -零 阅读(1556) 评论(0) 推荐(0) 编辑
摘要:原文链接 Go modules 是 Go 语言中正式官宣的项目依赖解决方案,Go modules(前身为vgo)于 Go1.11 正式发布,在 Go1.14 已经准备好,并且可以用在生产上(ready for production)了,Go 官方也鼓励所有用户从其他依赖项管理工具迁移到 Go mod 阅读全文
posted @ 2020-03-05 15:48 -零 阅读(397) 评论(0) 推荐(0) 编辑
摘要:在计算机内存昂贵,处理能力有限的美好旧时光里,用比较骇客的位运算方式去处理信息是首选方式(某些情况下只能如此)。时至今日,直接使用位运算仍然是很多计算领域中不可或缺的部分,例如底层系统编程,图形处理,密码学等。 Go 编程语言支持以下按位运算符: & bitwise AND | bitwise OR 阅读全文
posted @ 2020-03-05 13:14 -零 阅读(3317) 评论(0) 推荐(0) 编辑
摘要:原文链接 CSP vs Actor 模型 Actor Actor 模型是一个通用的并发编程模型,可以应用在几乎任何一种编程语言中,典型的是 Erlang。多个 actor(进程) 可以同时运行、不共享状态、通过向与进程绑定的消息队列(也称为信箱)异步发送消息来进行通信。 actor-1 与 acto 阅读全文
posted @ 2020-03-04 18:34 -零 阅读(1616) 评论(0) 推荐(0) 编辑
摘要:go-metrics介绍 go-metrics — 对Go应用的某个服务做监控、做统计,应用级监控和测量。 源码 : https://github.com/rcrowley/go-metrics 文档:http : //godoc.org/github.com/rcrowley/go-metrics 阅读全文
posted @ 2020-03-04 13:40 -零 阅读(4298) 评论(0) 推荐(2) 编辑
摘要:数据库链接池的实现步骤 ConnPool type ConnPool interface { Get() (*Conn, error) // 获取资源 Pulish(*Conn) error // 释放资源,返回池中 Shutdown() error // 关闭池 } type Connpool s 阅读全文
posted @ 2020-03-02 23:02 -零 阅读(980) 评论(0) 推荐(0) 编辑
摘要:原文链接:基本的 IO 接口 原文链接:方便的IO操作函数集 图片来源:图片显示来源 1. 1.1 io — 基本的 IO 接口 io 包为 I/O 原语提供了基本的接口。它主要包装了这些原语的已有实现。 由于这些被接口包装的I/O原语是由不同的低级操作实现,因此,在另有声明之前不该假定它们的并行执 阅读全文
posted @ 2020-02-29 19:40 -零 阅读(1847) 评论(0) 推荐(0) 编辑
摘要:sync.atomic atomic 提供的原子操作能够确保任一时刻只有一个goroutine对几种简单的类型进行原子操作进行操作,善用atomic能够避免程序中出现大量的锁操作。这些类型包括int32,int64,uint32,uint64,uintptr,unsafe.Pointer,共6个。这 阅读全文
posted @ 2020-02-28 20:43 -零 阅读(6263) 评论(0) 推荐(0) 编辑
摘要:Goroutine Pool架构 超大规模并发的场景下,不加限制的大规模的goroutine可能造成内存暴涨,给机器带来极大的压力,吞吐量下降和处理速度变慢。 而实现一个Goroutine Pool,复用goroutine,减轻runtime的调度压力以及缓解内存压力,依托这些优化,在大规模goro 阅读全文
posted @ 2020-02-28 19:36 -零 阅读(2096) 评论(1) 推荐(2) 编辑
摘要:Cache类型 Cache封装了一个cache类型,cache类型的参数解析: 1.defaultExpiration time.Duration 每个键值的默认过期时间。 2.items map[string]Item map类型。 3.mu sync.RWMutex map类型的读写锁。 4.j 阅读全文
posted @ 2020-02-27 19:31 -零 阅读(1926) 评论(0) 推荐(0) 编辑
摘要:原文链接 go-runtime runtime 包 提供了运行时与系统的交互,比如控制协程函数,触发垃圾立即回收等等底层操作,下面我们就运行时能做的所有事情逐个进行说明与代码演示 1.获取GOROOT环境变量 2.获取GO的版本号 3.获取本机CPU个数 4.设置最大可同时执行的最大CPU数 5.设 阅读全文
posted @ 2020-02-26 12:13 -零 阅读(845) 评论(0) 推荐(0) 编辑
摘要:原文链接 bytes — byte slice 便利操作 该包定义了一些操作 byte slice 的便利操作。因为字符串可以表示为 []byte,因此,bytes 包定义的函数、方法等和 strings 包很类似,所以讲解时会和 strings 包类似甚至可以直接参考。 说明:为了方便,会称呼 [ 阅读全文
posted @ 2020-02-23 21:44 -零 阅读(4304) 评论(0) 推荐(0) 编辑
摘要:原文作者:shitaibin 链接:https://www.jianshu.com/p/79d27f200bcf 來源:简书 goroutine作为Golang并发的核心,我们不仅要关注它们的创建和管理,当然还要关注如何合理的退出这些协程,不(合理)退出不然可能会造成阻塞、panic、程序行为异常、 阅读全文
posted @ 2020-02-23 16:06 -零 阅读(8655) 评论(0) 推荐(1) 编辑
摘要:原文作者:shitaibin 链接:https://www.jianshu.com/p/8aa03db51043 來源:简书 Golang作为一个实用主义的编程语言,非常注重性能,在语言特性上天然支持并发,它有多种并发模型,通过流水线模型系列文章,你会更好的使用Golang并发特性,提高你的程序性能 阅读全文
posted @ 2020-02-23 14:55 -零 阅读(927) 评论(0) 推荐(0) 编辑
摘要:package main import ( "bytes" "flag" "fmt" "io" "log" "net" "os" "strings" "time" ) func main() { var srcHost, agencyHost string flag.StringVar(&srcHo 阅读全文
posted @ 2020-02-23 11:10 -零 阅读(588) 评论(0) 推荐(0) 编辑
摘要:go 互斥锁与读写锁 互斥锁 互斥锁控制下的多个写操作之间、多个读操作之间是互斥的,并且写操作与读操作之间也是互斥的。互斥锁适用于读写不确定场景,即读写次数没有明显的区别,并且只允许只有一个读或者写的场景,所以该锁叶叫做全局锁,也就是完全互斥。互斥锁是传统的并发程序对共享资源进行访问控制的主要手段。 阅读全文
posted @ 2020-02-22 20:41 -零 阅读(850) 评论(0) 推荐(0) 编辑
摘要:工作池与消息队列框架 Woker Pool:工作池中有固定数量的协程,每一个协程对应一个消息任务队列。 消息任务队列:消息任务队列,本质就是go中的缓冲信道,任务在缓冲信道中传输,等待被处理。 TaskQueue:消息任务队列的集合,本质就是 client Handler Reader:在这里假设为 阅读全文
posted @ 2020-02-22 20:21 -零 阅读(956) 评论(0) 推荐(0) 编辑