Giter VIP home page Giter VIP logo

zboya / golang_runtime_reading Goto Github PK

View Code? Open in Web Editor NEW
519.0 31.0 74.0 150.14 MB

golang 1.10.2 runtime code reading - golang runtime源码分析。只有思考过,你才会印象深刻。

License: BSD 3-Clause "New" or "Revised" License

Shell 0.15% Batchfile 0.02% Go 89.34% Assembly 4.38% C 0.33% Makefile 0.01% Awk 0.01% Perl 0.08% HTML 5.66% C++ 0.01% Python 0.03% Fortran 0.01% JavaScript 0.01%
golang runtime source goroutine data-structures

golang_runtime_reading's Introduction

初定方案

有任何理解错误的地方,还望指出

golang官网

目标

理解golang runtime的运行原理,重点掌握golang的调度,gc,内存分配,数据结构.

对于注释不理解的,欢迎提issue

目前的进度

  • 2018-08-05 已阅读完调度系统的大概源码
  • 2018-08-12 正在仔细阅读调度的源码
  • 2018-08-19 正在仔细阅读调度的源码
  • 2018-08-27 正在仔细阅读调度的源码
  • 2018-09-02 已仔细阅读完调度的源码,正在阅读gc的大概源码
  • 2018-09-09 正在阅读gc的大概源码
  • 2018-09-16 大概阅读完gc流程源码
  • 2018-09-24 开始详细阅读gc源码
  • 2018-10-13 理解mgc的注释和大概阅读gcStart
  • 2018-10-20 阅读gcMark准备和markroots扫描根对象的逻辑
  • 2018-10-27 阅读gc的栈扫描和消费标记队列
  • 2018-11-04 内存分配的注释 (@jingyugao)
  • 2018-11-25 简单看了一下系统调用如何调度
  • 2018-01-12 开始阅读内存分配
  • 2019-01-19 补充gc的整个流程和继续阅读内存分配
  • 2019-02-10 继续阅读内存分配
  • 2019-02-22 基本阅读完内存分配的流程,接下来阅读栈的分配
  • 2019-03-03 阅读栈管理的代码
  • 2019-03-18 基本阅读完stack的分配
  • 2019-03-30 阅读golang网络底层原理和Mutex的实现
  • 2019-04-08 简单阅读channel的实现
  • 2019-04-21 从头开始阅读调度系统,并开始编写调度实现文档
  • 2019-05-12 继续阅读调度系统,编写调度实现文档

微信群

想一起阅读的小伙伴可以加我微信sheepbao-520,加入阅读群 wechat

github地址

https://github.com/sheepbao/golang_runtime_reading

时间

每周日晚9:00-10:00

golang版本

go1.10.2

准备工作

  • 有一台能上网的电脑
  • 安装zoom软件,并注册
  • 装一个阅读golang源码的编译器或者ide,推荐vscode
  • 下载go1.10.2的源码

可以先阅读的资料

活动步骤

  • 线上用zoom共享屏幕,阅读golang runtime源码,一起讨论添加注释,尽量让每个人都理解
  • 提交结果到github

阅读的方式

  1. 选好一个主题,并查询资料阅读该主题的相关背景
  2. 大概浏览阅读相关源码
  3. 仔细阅读源码实现原理
  4. 最后再整理整个流程

暂定的主题

  1. goroutine调度实现
  2. 数据结构的实现
  3. 内存分配实现
  4. gc的实现

golang_runtime_reading's People

Contributors

0intro avatar aclements avatar adg avatar agl avatar alexbrainman avatar ality avatar bradfitz avatar cherrymui avatar cixtor avatar crawshaw avatar davecheney avatar dr2chase avatar dsnet avatar dsymonds avatar dvyukov avatar griesemer avatar ianlancetaylor avatar josharian avatar ken avatar martisch avatar mdempsky avatar minux avatar mundaym avatar mwhudson avatar niemeyer avatar nigeltao avatar randall77 avatar remyoudompheng avatar robpike avatar rsc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

golang_runtime_reading's Issues

有没有往期的视频

今天才看到这个项目,有没有往期zoom阅读代码的视频,可以分享一下呢

sysmon是不是和某个M共用?该M也进行执行G?

Please answer these questions before submitting your issue. Thanks!

What version of Go are you using (go version)?

1.13.6
我在阅读您的blog 《深入golang-runtime的调度》看到
main goroutine启动的时候是在m0中启动,然后在执行proc.go main函数中有一个newm(sysmon, nil) 好像是新建一个m线程去执行sysmon监控,也就是说sysmon是不是独立一个线程运行?
但是我在测试调度的时候发现,如果gorouine里面做了一个无限循环,在用户main函数循环内创建多个goroutine(超过runtime.GOMAXPROCS个)发现在最终调用的时候就只要runtime.GOMAXPROCS个被执行,另外其他的goroutine并没有被执行,如果按照源代码中以及您的分析,应该会被sysmon进行抢占,把P和m剥离再创建新的m线程去执行其他的goroutine,但是从结果来看,好像sysmon并不是独立线程而是和某个m共用了,导致m如果被占用就无法做出抢占和调度,不知道是否是这个原因?代码如下:

package main
import (
	"fmt"
	"sync"
)

var wg sync.WaitGroup

func process(id int) {
	fmt.Printf("id: %d\n", id)
	for {
		// time.Sleep(time.Second)
	}
	// wg.Done()
}
func main() {
	runtime.GOMAXPROCS(4)
	// println(runtime.NumCPU())
	 wg.Add(1)
	 for i := 0; i < 10; i++ {
	 	go process(i)
	 }
	wg.Wait()
}

最终输出的只要 4个

README 中二维码过期了

Please answer these questions before submitting your issue. Thanks!

What version of Go are you using (go version)?

Does this issue reproduce with the latest release?

What operating system and processor architecture are you using (go env)?

What did you do?

If possible, provide a recipe for reproducing the error.
A complete runnable program is good.
A link on play.golang.org is best.

What did you expect to see?

What did you see instead?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.