Golang学习笔记
LMFranK
这个作者很懒,什么都没留下…
展开
-
golang性能调优工具pprof使用注意事项
前言pprof是一个非常强大的golang性能调优工具,在win10环境下使用其web可视化功能时可能会出现问题,这里记录下解决方案。问题当我们输入web后应该会弹出web可使界面,但是如果没有安装过gvedit会报错:Failed to execute dot. Is Graphviz installed? Error: exec: "dot": executable file not found in %PATH%解决方案gvedit官网:https://graphviz.gitlab.i原创 2021-06-01 16:45:53 · 1568 阅读 · 0 评论 -
Golang调度器GMP学习笔记(二)
调度器的设计策略复用线程:避免频繁的创建、销毁线程work stealing当本线程无可运行的G时,尝试从其他线程绑定的P偷取G,而不是销毁线程hand off当本线程因为G进行系统调用阻塞时,线程释放绑定的P,把P转移给其他空闲的线程执行利用并行GOMAXPROCS抢占Go中,一个goroutine最多占用CPU 10ms,防止其他goroutine被饿死。其他语言的协程要等待一个协程主动让出CPU才执行下一个协程全局G队列在新的调度器中依然有全局G队列,原创 2020-09-10 15:40:18 · 270 阅读 · 0 评论 -
Golang调度器GMP学习笔记(一)
调度器的由来单进程时代的问题单一执行流程,计算机只能一个任务一个任务处理进程阻塞所带来的CPU时间浪费多进程、多线程的问题设计变得复杂进程/线程的数量越多,切换成本就越大多线程伴随着同步竞争(锁、资源冲突等)多进程、多线程的壁垒高内存占用高CPU调度消耗协程的问题N:1无法利用多个CPU出现阻塞的瓶颈1:1和多线程/多进程模型无异切换协程成本代价反而变得昂贵M:N能够利用多核过原创 2020-09-08 16:08:52 · 231 阅读 · 0 评论 -
在循环迭代器变量上使用goroutines所引发的问题
问题在爬虫项目中,有一步开启了goroutine,并且内部使用了循环变量/*...*/for _, item := range result.Items { go func() { e.ItemChan <-item }()}/*...*/我希望能够按照循环输出不同的item,但实际输出了很多相同的item,这就是在循环迭代器变量上使用goroutines所引发的问题实例代码:for i := 0; i < 10; i++ { fmt.Println(i原创 2020-07-22 22:38:51 · 2684 阅读 · 1 评论