golang runtime

作者: bradyjoestar | 来源:发表于2017-07-15 11:58 被阅读0次

golang

写在前面

golang由于其能够支持大量并发运算的特性而广泛地应用于云计算领域。
本文对golang的底层进行一个简单的分析与说明。

golang runtime

go程序架构图

如上所示是golang程序运行过程中的架构图。

golang程序并没有像java一样自带虚拟机,而是和c类似。
每一个go程序都带有一个runtime,runtime负责和底层操作系统交互。

一个go程序运行所经过的几个主要步骤:

  • 调用osinit,操作系统级别的初始化
  • 调用runtime·schedinit(获取程序运行参数、获取程序环境变量)
  • 调用runtime·mstart启动M(在runtime中定义的数据结构)
  • 调用runtime·main

runtime实现比较复杂,在这里我们使用网上的一张图片
golang 是一门较为简单的语言,简单的语言并不代表不是优秀的语言。golang主要有三个feature。

协程(进程 线程)

进程:
进程是“程序执行的一个实例” ,担当分配系统资源的实体。进程创建必须分配一个完整的独立地址空间。

进程切换只发生在内核态,

线程:线程是进程的一个执行流,独立执行它自己的程序代码。

协程:协程不是进程或线程,其执行过程更类似于子例程,或者说不带返回值的函数调用。

在语言级别可以创建并发协程,然后编写代码去进行管理。go将这一步承包下来,使协程并发运行成本更低。

channel

channel是Go语言在语言级别提供的goroutine间的通信方式。我们可以使用channel在两个或 多个goroutine之间传递消息。

channel 会某种情况下出现阻塞,通过控制channel的阻塞来管理协程的并发与流程控制。

interface

  • 非侵入式接口。golang则采取了完全不同的设计理念,在Go语言中,一个类只需要实现了接口要求的所有函数,我们就说这个类实现了该接口

  • golang不支持完整的面向对象思想,它没有继承,多态则完全依赖接口实现。golang只能模拟继承,其本质是组合

相关文章

  • runtime

    Golang中的runtime类似Java中的JVM虚拟机,不过runtime并非是虚拟机。 Golang程序生成...

  • GolangRuntime学习

    Runtime 简介和发展 Runtime 简介 Golang Runtime 是go语言运行所需要的基础设施 协...

  • Golang 1.14中内存分配、清扫和内存回收

    golang内存分配 Golang的内存分配是由golang runtime完成,其内存分配方案借鉴自tcmall...

  • Golang中runtime的使用

    Golang中runtime的使用 runtime调度器是非常有用的东西,关于runtime包几个方法: Gosc...

  • golang

    golang携程调度,runtime包 golang内存模型 csp原理 context的原理 slice底层结构...

  • golang runtime

    golang 写在前面 golang由于其能够支持大量并发运算的特性而广泛地应用于云计算领域。本文对golang的...

  • runtime

    runtime 应该是golang最牛的一个功能了,看了一下,这包里好多东西 golang底层实现资料Golang...

  • 记一次golang gc优化过程

    我们使用golang编写的线上服务,通常会设置一个golang runtime指标监控,包括goroutine n...

  • chan(rutime. hchan)结构

    chan实际结构是runtime.hchan(https://github.com/golang/go/blob/...

  • go中的channel

    原文https://draveness.me/golang/docs/part3-runtime/ch06-con...

网友评论

    本文标题:golang runtime

    本文链接:https://www.haomeiwen.com/subject/jibahxtx.html