关于Goroutine与Channel

关于Goroutine的原理 原理上的内容比较多,比如goroutine启动的时候要执行哪些相关的操作,一点一点的补充一下。 channel的基本原理 channel是go语言中的特殊的机制,既可以同步两个被并发执行的函数,又可以让这两个函数通过相互传递特定类型的值来进行通信。事实上这也是channel的两个主要功能。 按照通道在初始化时是否有缓冲值,又可以分为缓冲通道与非缓冲通道。通道初始化的时候也还是需要使用make进行,比如make(chan int,10)声明一个缓冲空间为10个int的...阅读全文

阅读:3571 评论:0

Golang Context 详细介绍

Golang context 本文包含对context实现上的分析和使用方式,分析部分源码讲解比价多,可能会比较枯燥,读者可以直接跳过去阅读使用部分。 ps: 作者本着开源分享的精神撰写本篇文章,如果出现任何误差务必留言指正,作者会在第一时间内修正,共同维护一个好的开源生态,谢谢!!! 一、简介 作者所讲的context的包名称是: "golang.org/x/net/context" ,希望读者不要引用错误了。 在godoc中对context的介绍如下: Package context def...阅读全文

2018-05-31 19:26 cnblogs-wangzhi 等
阅读:3837 评论:0

剖析golang map的实现

[TOC] 本文参考的是golang 1.10源码实现。 golang中map是一个kv对集合。底层使用hash table,用链表来解决冲突,通过编译器配合runtime,所有的map对象都是共用一份代码。 对比其他语言 c++使用红黑树组织,性能稍低但是稳定性很好。使用模版在编译期生成代码,好处是效率高,但是缺点是代码膨胀、编译时间也会变长。 java使用的是hash table+链表/红黑树,当bucket内元素超过某个阈值时,该bucket的链表会转换成红黑树。java为了所有map共用...阅读全文

2018.10.27 15:54 123archu
阅读:2158 评论:0

Golang 源码导读 —— chann

由于掘金不支持 mermaid 流程图,所以想看完整的版本,可以到我的个人博客中查看 01.chan 的数据结构: golang 中 chan 的源码在 src/runtime/chan.go 文件中,hchan 则为 chan 的结构体 hchan: type hchan struct { qcount uint // 当前缓存数据的总量 dataqsiz uint // 缓存数据的容量 buf unsafe.Pointer // 缓存数据,为一个循环数组,容量大小为 dataqsiz,当前大...阅读全文

阅读:526 评论:0