前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go 语言进阶--基础概念

Go 语言进阶--基础概念

作者头像
邹志全
发布2019-07-31 14:47:30
3090
发布2019-07-31 14:47:30
举报
文章被收录于专栏:EffectiveCodingEffectiveCoding

本系列文章到现在已经将Go非常基础的部分介绍完成了,后面就开始设计非常具有Go特色的内容了,因为之后会出现一系列的名词和概念,为了方便本篇先把这些基础概念和我的理解阐述一下。 首先Go是一门编译型语言,编译时产生一份本地可执行代码,但是这些代码其实是执行在go 的runtime上的。

runtime

runtime 可以大致理解为是Java中的虚拟机或者是一个调度器,主要负责管理内存分配、垃圾回收、栈操作、goroutine、channel、slice、反射等。

内存管理

Go 语言同Java类似帮助我们去管理内存,而不是C那样程序员自行管理。内存管理主要包含 内存分配、垃圾回收 两大部分: 内存分配器主要负责栈内存的分配及小对象的分配(小于32k的对象)。其中小对象的分配是通过多级cache 来实现的。

垃圾回收

go 的垃圾回收是一种非分代的、非紧锁的、写屏障的、并发标记清除的回收机制,看上不是不是感觉就是一个只有老年代区域并且使用的cms(Java 中的一种垃圾回收器),只是看上去像而已,具体的实现差异还是很大的,这个后续会单独介绍。

goroutine

goroutine 是go中设计最巧妙的地方所在,goroutine 是一种go 协程,相对于线程来说实现在用户空间下。

栈空间

当开启一个goroutine时,runtime会为goroutine分配一个栈空间(通常 8k左右),这个栈空间不是固定大小的,而是在runtine需要的时候动态分配栈空间。go 中的栈空间是分块式的,这个后续会详细介绍。

channel

管道是Go语言在语言级别上提供的goroutine间的通讯方式,我们可以使用channel在多个goroutine之间传递消息。channel是进程内的通讯方式,是不支持跨进程通信的,如果需要进程间通讯的话,可以使用类似于Socket、管道、信号量等进程间通信方式,关键字是chan。 概念的话暂时就这么多,后期会对每一个知识点进行剖析。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.07.10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • runtime
  • 内存管理
  • 垃圾回收
  • goroutine
  • 栈空间
  • channel
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档