Golang汇编快速指南

本文翻译自Golang官方文档,原文地址: https://golang.org/doc/asm 这篇文档是对于Go编译器套件(6g, 8g, etc.)中不常用的汇编语言的快速预览,涵盖面不是很广泛。 Go的汇编语言基于Plan 9的汇编,Plan 9网站的页面上有详细描述。如果你想编写汇编语言,你应该读这篇文档,虽然它是Plan 9相关的。这边文档总结了汇编的语法,并且描述了使用汇编语言和Go程序交互时的特殊之处。 有一点是很重要的是,Go的汇编中没有直接体现出底层的机器。有些汇编细节能直接...阅读全文

2015-04-23 15:40:07 华子
阅读:15150 评论:0

Go 语言编译器的 "//go:" 详解

前言 C 语言的 #include 一上来不太好说明白 Go 语言里 //go: 是什么,我们先来看下非常简单,也是几乎每个写代码的人都知道的东西:C 语言的 #include。我猜,大部分人第一行代码都是 #include 吧。完整的就是#include <stdio.h>。意思很简单,引入一个 stdio.h。谁引入?答案是编译器。那么,# 字符的作用就是给 编译器 一个 指示,让编译器知道接下来要做什么。 编译指示 在计算机编程中,编译指示(pragma)是一种语言结构,它指示编译器应该如...阅读全文

阅读:1553 评论:0

[golang]如何看懂调用堆栈

之前也有文章讲过go调用堆栈的话题,但并没有完全讲清楚,这里补充里面缺漏的几个点。 阻塞 goroutine 1 [select, 2 minutes]: 方括号里的select表示阻塞原因,具体定义见runtime.waitReason 。 后面的时间是阻塞时间。需要注意的是这只是一个大概时间,是在gc的过程中标记的,所以如果这个goroutine不需要gc,那么永远也不会有值。 PC偏移 github.com/robfig/cron.(*Cron).run(0xc0000c44b0) cro...阅读全文

2019.01.06 13:29* 一桶冷水
阅读:1426 评论:0

Golang <-time.After()在计时器过期前不会被垃圾回收

最近我在调查 Go 应用程序中内存泄漏的问题,这个问题主要因为我没有正确的阅读文档。这是一段导致消耗了多个 Gbs 内存的代码: ```go func ProcessChannelMessages(ctx context.Context, in <-chan string, idleCounter prometheus.Counter) { for { start := time.Now() select { case s, ok := <-in: if !...阅读全文

阅读:2430 评论:4

[译]Go:Goroutine, OS线程 以及 CPU管理

原文https://medium.com/a-journey-with-go/go-goroutine-os-thread-and-cpu-management-2f5a5eaf518a 操作系统的线程创建以及切换是需要开销的,会影响程序的性能。Go致力于尽可能地从内核中获取优势,所以从最开始的时候设计就考虑到了并发性。 M,P,G 编排 为了解决这个问题,Go有他自己的调度者,负责在线程上分配goroutines。这个协调者由3个概念组成,如下: The main concepts are: ...阅读全文

2019年11月27日 野生程序元
阅读:442 评论:0

如何"优雅"地发布 go module 模块

前言 截止到go1.13, go 官方推出的包管理工具go module已经发布三个版本了,网上也有很多文章介绍如何使用go module(推荐观看附录中Go夜读的视频和官方Wiki),但是大部分都是讲如何引用别人的go module模块,鲜有提到如何发布自己的go module包的文章。本文将主要介绍如何“优雅”地发布自己的go module模块。 本文的代码和命令均在 ubuntu 19.10 中运行,go 的版本为 1.13.5 pkg.go.dev简介 go.dev 是go官方团队于20...阅读全文

2020年02月20日 YouEclipse
阅读:2184 评论:0

[典藏版]Golang调度器GMP原理与调度全分析

该文章主要详细具体的介绍Goroutine调度器过程及原理,可以对Go调度器的详细调度过程有一个清晰的理解,花 费4天时间作了30+张图(推荐收藏),包括如下几个章节。 第一章 Golang调度器的由来 第二章 Goroutine调度器的GMP模型及设计思想 第三章 Goroutine调度场景过程全图文解析 一、Golang“调度器”的由来? (1) 单进程时代不需要调度器 我们知道,一切的软件都是跑在操作系统上,真正用来干活(计算)的是CPU。早期的操作系统每个程序就是一个进程,知道一个程序运...阅读全文

阅读:786 评论:0

「译文」Go 语言内存管理与分配

内存管理与分配 原文:Memory Management and Allocation 本文基于Go1.13 当内存不被使用时,Go 标准库会自动执行 Go 内存管理,即将内存分配到内存收集器。因为开发人员不必处理它,所以 Go 对隐含的内存管理进行了很多的优化并且衍生了很多概念。 堆上的分配 内存管理旨在在并发环境中快速运行,并与垃圾回收器集成在一起。让我们从一个简单的示例开始: package main type smallStruct struct { a, b int64 c, d fl...阅读全文

阅读:173 评论:0