首页 > 其他分享 >2.2 Go运行时(runtime)

2.2 Go运行时(runtime)

时间:2024-06-02 09:33:47浏览次数:22  
标签:语言 回收 垃圾 Go 2.2 runtime

2.2.1 Go运行时(runtime)

尽管 Go 编译器产生的是本地可执行代码,这些代码仍旧运行在 Go 的 runtime(这部分的代码可以在 runtime 包中找到)当中。这个 runtime 类似 Java 和 .NET 语言所用到的虚拟机,它负责管理包括内存分配、垃圾回收(第 10.8 节)、栈处理、goroutine、channel、切片(slice)、map 和反射(reflection)等等。

runtime 主要由 C 语言编写(Go 1.5 开始自举),并且是每个 Go 包的最顶级包。你可以在目录 $GOROOT/src/runtime 中找到相关内容。

垃圾回收器

Go 拥有简单却高效的标记-清除回收器。它的主要思想来源于 IBM 的可复用垃圾回收器,旨在打造一个高效、低延迟的并发回收器。目前 gccgo 还没有回收器,同时适用 gc 和 gccgo 的新回收器正在研发中。使用一门具有垃圾回收功能的编程语言不代表你可以避免内存分配所带来的问题,分配和回收内容都是消耗 CPU 资源的一种行为。

Go 的可执行文件都比相对应的源代码文件要大很多,这恰恰说明了 Go 的 runtime 嵌入到了每一个可执行文件当中。当然,在部署到数量巨大的集群时,较大的文件体积也是比较头疼的问题。但总得来说,Go 的部署工作还是要比 Java 和 Python 轻松得多。因为 Go 不需要依赖任何其它文件,它只需要一个单独的静态文件,这样你也不会像使用其它语言一样在各种不同版本的依赖文件之间混淆。

2.2.2 Go解释器

因为 Go 具有像动态语言那样快速编译的能力,自然而然地就有人会问 Go 语言能否在 REPL(read-eval-print loop)编程环境下实现。Sebastien Binet 已经使用这种环境实现了一个 Go 解释器,你可以在这个页面找到:https://github.com/sbinet/igo。

标签:语言,回收,垃圾,Go,2.2,runtime
From: https://www.cnblogs.com/kuro-liang/p/18226786

相关文章

  • go程序结构
    1、命名规则名称的开头是字母或者下划线,后面可以跟任意数量的字符、数字或者下划线。区分大小写,hello和Hello是不同的名称实体第一个字母的大小写决定其可见性是否跨包。包名本身总是由小写字母组成名称本身没有长度限制,倾向使用短名称,并且驼峰式风格。2、变量......
  • 【Django技术深潜】揭秘Django定时任务利器:django_apscheduler全面解析与实战
    在现代Web开发中,定时任务是不可或缺的一部分,无论是定期数据分析、定时发送邮件、还是系统维护脚本,都需要精准的定时调度。Django作为Python世界中强大的Web框架,其对定时任务的支持自然也是开发者关注的重点。本文将深入探讨Django定时任务解决方案,特别是聚焦于django_apscheduler......
  • golang json 性能分析
    Json作为一种重要的数据格式,具有良好的可读性以及自描述性,广泛地应用在各种数据传输场景中。Go语言里面原生支持了这种数据格式的序列化以及反序列化,内部使用反射机制实现,性能有点差,在高度依赖json解析的应用里,往往会成为性能瓶颈,从下面的火焰图中可以发现在业务逻辑处理......
  • Django中使用Celery和APScheduler实现定时任务
    在之前的文章我们已经学习了Celery和APScheduler的基本使用,下面让我们来了解一下如何在Django中使用Celery和APSchedulerCelery1.前提工作python3.7pipinstallcelerypipinstalleventlet#5.0版本以下pipinstallimportlib-metadata==4.8.3(python3.7下可能会出现报......
  • Goose Goose Duck(第八届河北省大学生程序设计竞赛)
    #include<bits/stdc++.h>#defineendl'\n'usingll=longlong;typedefunsignedlonglongull;usingnamespacestd;voidGordenGhost();structsb{inta,b,c;};signedmain(){#ifdefGordenfreopen("in.txt","r......
  • MongoDB CRUD操作:批量写操作
    MongoDBCRUD操作:批量写操作文章目录MongoDBCRUD操作:批量写操作关于批量操作的顺序bulkWrite()支持的方法举例向分片集合批量插入的策略预分割集合无序写入mongos避免单调节流MongoDB提供了批量执行写入操作的能力,但批量写入操作只影响单个集合,MongoDB允许应用......
  • go语言电子商场项目
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、前言......
  • go基础入门
    go不需要在语句或声明后面使用分号结尾左括号{必须与关键字func同一行,不能独自成行x+y表达式,换行符可以在+操作符的后面,不能在+操作符的前面go中索引使用半开区间,左开右闭,包含左边索引元素,不包含右边索引元素。var关键字用来声明变量,如果没有明确初始化,会隐式的初......
  • vcruntime140.dll丢失如何安装,附找不到vcruntime140.dll的六种解决方法
    vcruntime140.dll是一个动态链接库文件,属于MicrosoftVisualC++RedistributablePackages的一部分,专为VisualStudio2015开发环境设计。它提供了C运行时库(CRT)中的一些关键功能,以及一些额外的Microsoft特定的运行时功能。这些功能包括但不限于内存分配与释放、数学计算、字符......
  • Go-知识并发控制Context
    Go-知识并发控制Context1.介绍2.实现原理2.1接口定义2.2Deadline()2.3Done()2.4Err()2.5Value()3.空context4.cancelCtx4.1Done()4.2Err()4.3cancel()4.4WithCancel4.5例子4.6总结5.timerCtx5.1Deadline5.2cancel5.3WithDeadline5.4WithTimeout5.......