go语言 runtime

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只能模拟继承,其本质是组合

本文分享自微信公众号 - Golang语言社区(Golangweb)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-07-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏熊二哥

快速入门系列--WCF--04元数据和异常处理

本章节将进行元数据和异常处理的介绍,这部分内容概念型比较强,可以快速浏览一下就好。 ? 客户端和服务器借助于终结点进行通信,服务的提供者通过一个或者多个终结点...

20780
来自专栏ytkah

dedecms自增标签[field:global.autoindex/]的运用

  用bootstrap建站时用到幻灯片切换模块,里面有个active(下面代码中的data-slide-to="0"),其余的按顺序递增(1,2),如果用de...

38640
来自专栏Golang语言社区

Golang 之协程详解

  对于 进程、线程,都是有内核进行调度,有 CPU 时间片的概念,进行 抢占式调度(有多种调度算法)

38150
来自专栏专注 Java 基础分享

弄懂 JRE、JDK、JVM 之间的区别与联系

其实很多 Java 程序员在写了很多代码后,你问他 jre 和 jdk 之间有什么关系,jvm 又是什么东西,很多人不知所云。本篇不会讲述 jvm 底层是如何与...

38840
来自专栏欧阳大哥的轮子

iOS应用程序的脱壳实现原理浅析

对于诸多逆向爱好者来说,给一个app脱壳是一项必做的事情。基于安全性的考虑,苹果对上架到appstore的应用都会进行加密处理,所以如果直接逆向一个从appst...

12230
来自专栏java一日一条

40+个对初学者非常有用的PHP技巧(二)

考虑使用ob_gzhandler?不,别这样做。它没有任何意义。PHP应该是来写应用程序的。不要担心PHP中有关如何优化在服务器和浏览器之间传输的数据。

11010
来自专栏Bug生活2048

小程序云开发使用体验

这里发现直接更新有点慢,直接下载最新版然后覆盖比较快,打开最新的开发者工具之后会发现多了个云开发:

77220
来自专栏Golang语言社区

Golang语言并发技术详解

有人把Go比作21世纪的C语言,第一是因为Go语言设计简单,第二,21世纪最重要的就是并行程序设计,而Go从语言层面就支持了并行。

66450
来自专栏Golang语言社区

Golang学习-第一篇 Golang的简单介绍及Windows环境下安装、部署

序言 这是本人简书第一篇文章,写的不到位之处,希望各位看客们谅解。 本人一直从事.NET的开发工作,最近在学习Golang,所以想着之前学习的过程中都没怎么好好...

32050
来自专栏BeJavaGod

如何限制用户在某一时间段多次访问接口

要知道,如今很多平台的接口都是可以同时被门户网站,手机端,移动浏览器访问,因为接口是通用的,而为了安全起见,有些接口都会设置一个门槛,那就是限制访问次数,也就是...

42360

扫码关注云+社区

领取腾讯云代金券