linux – Golang:什么是etext?
发布时间:2020-12-13 19:35:22 所属栏目:Linux 来源:网络整理
导读:我已经开始介绍一些我的Go1.2代码,而顶级项目总是被命名为’etext’.我搜索过,但找不到很多关于它的信息,而不是它可能与Go例程中的调用深度有关.然而,我没有使用任何Go例程,’etext’仍占总执行时间的75%或更多. (pprof) top20 Total: 171 samples 128 74.9
我已经开始介绍一些我的Go1.2代码,而顶级项目总是被命名为’etext’.我搜索过,但找不到很多关于它的信息,而不是它可能与Go例程中的调用深度有关.然而,我没有使用任何Go例程,’etext’仍占总执行时间的75%或更多.
(pprof) top20 Total: 171 samples 128 74.9% 74.9% 128 74.9% etext 任何人都可以解释这是什么,如果有办法减少影响? 解决方法
我遇到同样的问题,然后我发现这个:
pprof broken in go 1.2?.要验证它是一个真正的1.2错误我写了下面的“你好世界”程序:
package main import ( "fmt" "testing" ) func BenchmarkPrintln( t *testing.B ){ TestPrintln( nil ) } func TestPrintln( t *testing.T ){ for i := 0; i < 10000; i++ { fmt.Println("hello " + " world!") } } 你可以看到它只调用fmt.Println. 你可以用“go test -c”来编译. (pprof) top10 Total: 36 samples 18 50.0% 50.0% 18 50.0% syscall.Syscall 8 22.2% 72.2% 8 22.2% etext 4 11.1% 83.3% 4 11.1% runtime.usleep 3 8.3% 91.7% 3 8.3% runtime.futex 1 2.8% 94.4% 1 2.8% MHeap_AllocLocked 1 2.8% 97.2% 1 2.8% fmt.(*fmt).padString 1 2.8% 100.0% 1 2.8% os.epipecheck 0 0.0% 100.0% 1 2.8% MCentral_Grow 0 0.0% 100.0% 33 91.7% System 0 0.0% 100.0% 3 8.3% _/home/xxiao/work/test.BenchmarkPrintln 上述结果是使用去1.2.1 (pprof) top10 Total: 10 samples 2 20.0% 20.0% 2 20.0% scanblock 1 10.0% 30.0% 1 10.0% fmt.(*pp).free 1 10.0% 40.0% 1 10.0% fmt.(*pp).printField 1 10.0% 50.0% 2 20.0% fmt.newPrinter 1 10.0% 60.0% 2 20.0% os.(*File).Write 1 10.0% 70.0% 1 10.0% runtime.MCache_Alloc 1 10.0% 80.0% 1 10.0% runtime.exitsyscall 1 10.0% 90.0% 1 10.0% sweepspan 1 10.0% 100.0% 1 10.0% sync.(*Mutex).Lock 0 0.0% 100.0% 6 60.0% _/home/xxiao/work/test.BenchmarkPrintln 你可以看到,1.2.1的结果没有什么意义.大部分时间都是Syscall和etext.而1.1.1结果正确. 所以我确信这是一个1.2.1的错误.而且我转而在我的实际项目中使用了1.1.1,我对现在的分析结果感到满意. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |