首页
沸点
课程
数据标注
HOT
AI Coding
更多
直播
活动
APP
插件
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
确定删除此收藏集吗
删除后此收藏集将被移除
取消
确定删除
确定删除此文章吗
删除后此文章将被从当前收藏集中移除
取消
确定删除
编辑收藏集
名称:
描述:
0
/100
公开
当其他人关注此收藏集后不可再更改为隐私
隐私
仅自己可见此收藏集
取消
确定
go
订阅
ggyylab
更多收藏集
微信扫码分享
微信
新浪微博
QQ
15篇文章 · 0订阅
我为什么放弃Go语言?
腾小云导读 你在什么时候会产生“想要放弃用 Go 语言”的念头?也许是在用 Go 开发过程中,接连不断踩坑的时候。
Go struct interface
感觉在Go语言里接口是能处理任何事情的基石,虽然函数是一等公民,但是接口就像万能胶水一般,能承载任何事情。以往的语言,大家都讲OOP,但是在Go语言里,这里没有class也没有extend,看起来OOP是一个很难理解的事情。但是,我们有struct和interface,用这两个…
Go 调度模型
G: Gourtines, 每个Goroutine对应一个G结构体,G保存Goroutine的运行堆栈,即并发任务状态。G并非执行体,每个G需要绑定到P才能被调度执行。
深入理解Go 1.9 sync.Map
Go官方的faq已经提到内建的map不是线程(goroutine)安全的。在Go 1.6之前, 内置的map类型是部分goroutine安全的,并发的读没有问题,并发的写可能有问题。自go 1.6之后, 并发地读写map会报错,这在一些知名的开源库中都存在这个问题
Go Interface实现
本文从源码的角度学习下Go接口的底层实现,以及接口赋值,反射,断言的实现原理。作为对比,用到了go1.8.6和go1.9.1两个版本。
Go addressable 详解
对于一个对象x, 如果它的类型为T, 那么&x则会产生一个类型为*T的指针,这个指针指向x, 这是这一段的第一句话,也是我们在开发过程中经常使用的一种获取对象指针的一种方式。
理解 Go Context 机制
最近在公司分析 gRPC 源码,proto 文件生成的代码,接口函数第一个参数统一是 ctx context.Context 接口,公司不少同事都不了解这样设计的出发点是什么,其实我也不了解其背后的原理。今天趁着妮妲台风妹子正面登陆深圳,全市停工、停课、停业,在家休息找了一些资料研究把玩一把。 Context 通常被译作上下文,它是一个比较抽象的概念。在公司技术讨论时也经常会提到上下文。一般理解为程序单元的一个运行状态、现场、快照,而翻译中上下又很好地诠释了其本质,上下上下则是存在上下层的传递,上会把内容传递给下。在 Go 语言中,程序单元也就指的是 Goroutine。 每个 Goroutine 在执行之前,都要先知道程序当前的执行状态,通常将这些执行状态封装在一个 Context 变量中,传递给要执行的 Goroutine 中。上下文则几乎已经成为传递与请求同生存周期变量的标准方法。在网络编程下,当接收到一个网络请求 Request,处理 Request 时,我们可能需要开启不同的 Goroutine 来获取数据与逻辑处理,即一个请求 Request,会在多个 Goroutine 中处理。而这些 Goroutine 可能需要共享 Request 的一些信息;同时当 Request 被取消或者超时的时候,所有从这个 Request 创建的所有 Goroutine 也应该被结束。
GO性能优化小结
做过C/C++的同学可能知道,小对象在堆上频繁地申请释放,会造成内存碎片(有的叫空洞),导致分配大的对象时无法申请到连续的内存空间,一般建议是采用内存池。Go runtime底层也采用内存池,但每个span大小为4k,同时维护一个cache。cache有一个0到n的list数组…
Go 并发机制
Go语言并不完美,它是以软件工程为目的的语言设计。其实现的并发机制也并不是什么革新的技术,只是将这些经典的理论和技术以一种简洁高效的方式组合了起来,并用简单抽象的API或语法糖开放给开发人员,着实减轻了开发人员编程的心智负担。
Go 调度详解
Go 调度相关的四个基本单元是 g、m、p、schedt。g 是协程任务信息单元,m 实际执行体,p 是本地资源池和 g 任务池,schedt 是全局资源池和任务池。这里的 m 对应一个 os 线程,所以整个执行逻辑简单来说就是 "某个 os 线程 m 不断尝试拿资源 p 并找任务 g 执行,没有可执行 g 则睡眠,等待唤醒并重复此过程",这个执行逻辑加上 sysmon 系统线程的定时抢占逻辑实际上就是整个宏观的调度逻辑了 (其中穿插了很多唤醒 m、system goroutine 等等复杂的细节),而找协程任务 g 的过程占据了其中大部分。g 的主要来源有本地队列、全局队列、其他 p 的本地队列、poller(net 和 file),以及一些 system goroutine 比如 timerproc、bgsweeper、gcMarkWorker、runfinq、forcegchelper 等。