go-GMP
* G — 表示 Goroutine,它是一个待执行的任务; * M — 表示操作系统的线程,它由操作系统的调度器调度和管理; * P — 表示处理器,它可以被看做运行在线程上的本地调度器; 协程调度,工作窃取
871 0
go defer运行机制
概念Go语言的defer会在当前函数返回前执行传入的函数,它会经常被用于关闭文件描述符、关闭数据库连接以及解锁资源。现象defer先进后出packagemainimport"fmt"f defer闭包,预读
435 0
go context上下文
1、context的解释在API之间或者方法调用之间,传递的除了业务参数之外的其他信息,比如traceId等。比如,服务端接收到客户端的HTTP请求之后,可以把客户端的IP地址和端口、客户端的身份信息 go,context,上下文,超时控制 channel
550 0
goroutine调度
Go 使用称为 goroutine 的用户级线程,它比内核级线程更轻且更便宜。 例如,创建一个初始 goroutine 将占用 2KB 的堆栈大小,而内核级线程将占用 8KB 的堆栈大小。 还有,goroutine 比内核线程有更快的创建、销毁和上下文切换,所以 go 调度器 需要退出来调度 goroutine。OS 不能调度用户级线程,OS 只知道内核级线程。 Go 调度器 将 goroutine 多路复用到内核级线程,这些线程将在不同的 CPU 内核上运行。GMP
1390 0
goroutine&waitgroup下载文件
当我们下载一个大文件的时候,会因为下载时间太久而超时或者出错。那么我么我们可以利用goroutine的特性并发分段的去请求下载资源。1、Accept-Ranges首先下载链接需要在响应中返回Accep goroutine&waitgroup下载文件 分片下载
625 0
golang中的几种并发模式
1、for-select模式这种模式通常用在从多个通道读取数据packagemainimport("fmt""time")funcmain(){ch1,ch2:=mak channel,select,并发模式,扇入模式,扇出模式 done-channel模式 为了避免内存泄漏,goroutine应该有被触发取消的机制。父 Goroutine 需要通过一个名为 done 的只读通道向其子 Goroutine 发送取消信号。按照惯例,它被设置为第一个参数。
583 0
golang中经常会犯的一些错误
1、未知的枚举值我们现在定义一个类型是unit32的Status,他可以作为枚举类型,我们定义了3种状态typeStatusuint32const(StatusOpenStatus=iotaStatu go,golang,内存管理,mistakes,内存泄漏,指针
936 0
golang中的锁竞争问题
* 更新课件时长的时候上锁,避免出现数据竞争 * 判断如果时长小于60秒的话,就报错。但是注意这里fmt.Errorf打印结构c会调用String()方法 * 我们看String方法里面,又使用了读锁,避免读取的时候数据被更新 mutex,死锁,数据竞争,data race
416 0