From ce88ce3dca9268a9afa6f1c7de372c65979d4ed6 Mon Sep 17 00:00:00 2001 From: sfw Date: Sun, 1 Jul 2018 23:55:46 +0800 Subject: [PATCH] ch3-07-fix typo --- ch3-asm/ch3-07-goroutine-id.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ch3-asm/ch3-07-goroutine-id.md b/ch3-asm/ch3-07-goroutine-id.md index 70eaac5..03de646 100644 --- a/ch3-asm/ch3-07-goroutine-id.md +++ b/ch3-asm/ch3-07-goroutine-id.md @@ -4,7 +4,7 @@ ## 故意设计没有goid -根据官方的相关资料显示,Go语言刻意没有提供goid的原因是为了避免被滥用。因为大部分用户在轻松拿到goid之后,在之后的编程中会不自觉地编写出强依赖goid的代码。强依赖goid将导致这些代码不好移植,同时也会导致并发模型复杂化。同时,Go语言中可能同时存在海量的Goroutine,但是每个Goroutine合适被销毁并不好实时监控,这也会导致依赖goid的资源无法很好地自动回收(需要手工回收)。如果你是Go汇编语言用户,完全可以忽略这些借口。 +根据官方的相关资料显示,Go语言刻意没有提供goid的原因是为了避免被滥用。因为大部分用户在轻松拿到goid之后,在之后的编程中会不自觉地编写出强依赖goid的代码。强依赖goid将导致这些代码不好移植,同时也会导致并发模型复杂化。同时,Go语言中可能同时存在海量的Goroutine,但是每个Goroutine何时被销毁并不好实时监控,这也会导致依赖goid的资源无法很好地自动回收(需要手工回收)。如果你是Go汇编语言用户,完全可以忽略这些借口。 ## 纯Go方式获取goid @@ -191,7 +191,7 @@ TEXT ·getg(SB), NOSPLIT, $32-16 RET ``` -其中AX寄存器对应g指针,BX寄存器对应g结构体的类型。然后通过runtime·convT2E函数将类型转为接口。因为我们使用的不是是g结构体指针类型,因此返回的接口表示的g结构体值类型。理论上我们也可以构造g指针类型的接口,但是因为Go汇编语言的限制,我们无法`type·*runtime·g`标识符。 +其中AX寄存器对应g指针,BX寄存器对应g结构体的类型。然后通过runtime·convT2E函数将类型转为接口。因为我们使用的不是g结构体指针类型,因此返回的接口表示的g结构体值类型。理论上我们也可以构造g指针类型的接口,但是因为Go汇编语言的限制,我们无法`type·*runtime·g`标识符。 基于g返回的接口,就可以容易获取goid了: @@ -264,7 +264,7 @@ TEXT ·getg(SB), NOSPLIT, $32-16 RET ``` -其中NO_LOCAL_POINTERS表示函数没有局部指针变量。同时对返回的接口进行零值初始化,初始化完成后通过GO_RESULTS_INITIALIZED告知GC。这样可以在保证栈分裂是,GC能够正确处理返回值和局部变量中的指针。 +其中NO_LOCAL_POINTERS表示函数没有局部指针变量。同时对返回的接口进行零值初始化,初始化完成后通过GO_RESULTS_INITIALIZED告知GC。这样可以在保证栈分裂时,GC能够正确处理返回值和局部变量中的指针。 ## goid的应用: 局部存储