0%

  上一篇 【golang源码分析】之GPM概述 ,我们介绍 GPM 的一些基础概念,这里将是重点,梳理 GMP 的调度流程。其实在 【golang源码分析】之启动追踪 中以及梳理了一下启动流程,涉及到的地方,这里会简要的过一下。

初始化

程序的入口

1
2
3
4
5
6
7
8
9
10
// src/runtime/rt0_linux_amd64.s
// linux amd64 系统的启动函数
TEXT _rt0_amd64_linux(SB),NOSPLIT,$-8
JMP _rt0_amd64(SB) // 跳转到_rt0_amd64函数, 在 asm_amd64.s 中。

// src/runtime/asm_amd64.s
TEXT _rt0_amd64(SB),NOSPLIT,$-8
MOVQ 0(SP), DI // argc // 设置参数argc
LEAQ 8(SP), SI // argv // 设置参数argv
JMP runtime·rt0_go(SB) // 跳转到runtime·rt0_go
阅读全文 »

  我们知道 golang 原生支持并发,goroutine 就是其设计的核心。 goroutine 是用户态线程,也就是协程。这是对内核透明的,也就是系统并不知道有协程的存在,是完全由用户自己的程序进行调度的,当然这不需要我们做什么工作,golang 已经帮我们处理了。在如今处处高并发的时代,很多库包括语言都有协程的影子。例如,腾讯的 libco 是微信后台大规模使用的c/c++协程库;lua 也是有协程的。

阅读全文 »

  很多人也许对Go代码是怎么启动的比较感兴趣, 我也不例外。 因此在这里调试下代码, 看看到底是怎么启动的, 并在此做下记录, 暂时不会逐行分析,只是了解下Go的启动流程。(关于环境,在第一篇【golang源码分析】之源码结构中已经提到过, 如无特殊说明后续相关的都是基于此环境,不再提及。)

阅读全文 »

为什么要看golang源码

  如果是为了简简单单的使用golang, 也许我们不需要去看golang源码。但是, 如果真的想在这方便有更深入的了解, 还是有必要去研究部分源码, 去深入了解原理, 这样在以后的编码中能够做到更高效; 另外,品读研习源码也能够很好的熟悉golang语法, 学习优质的代码编写。

阅读全文 »

为什么现在开始写博客

  从毕业开始到现在, 平时工作中也经常会查找一些知识点, 有些记录了, 有些却没有记录, 慢慢的容易忘记, 以前的记录也容易丢失, 所以希望以后在这里记录下来。记录的过程也是巩固的过程, 同时也方便以后回顾。

主要记录的是什么

  本博客主要记录一些IT技术, 也可能会记录一些生活。

阅读全文 »