go并发,测试,调优| 青训营笔记

195 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天

go的并发如何理解

实际上就是吃透所谓的协程概念,首先要确定的共识就是一整个go程序对应一个线程,但可以对应多个协程,而这些协程在没有利用信道之间进行通信时是相互独立的,而我们的main函数就是一个主协程,它的关闭将会导致全部附属于它的协程关闭,所以我们需要用类似于下面的手段阻止其关闭

  time.Sleep(time.Second)
//---------------------------
var wq sync.WaitGroup
	wq.Add(1)
	go func(word string) {
		defer wq.Done()
		query1(word)
	}(word)
	go func(word string) {
		defer wq.Done()
		query(word)
	}(word)
	wq.Wait()
fmt.Println("---------")

如果有做过第一天的作业的人,不知道会不会和我一样印象深刻,就是利用go关键字会导致代码出现空间上的不一致,就比如上面的那段代码,这是我的作业的一部分,我在输出结果时,总是首先进行打印“-----------”,然后才是进行query,这是因为无论是query1还是query,都需要等待对方服务器的响应,所以会慢于分割线的出现,其次query的访问速度大于query1,所以即便query1在前面,仍然会是query先执行完成,所以我们可以将上述代码中的go独立出来当作一个新的副main函数,而这个过程,很像异步

测试

我对这个测试真的是无语了,我在win下无论如何都调不动-benchmen这种参数,然后被迫转战wsl进行测试,我人也是真麻了,以后不说别的人,只要运行跑这个玩意我就直接wsl了,然后有关于wsl怎么安装请参照下面的链接zhuanlan.zhihu.com/p/466001838

有关于如何在wsl里去访问win上的文件

cd /mnt进入我们的win系统,然后ls一下,看下要进入哪个盘,接着反正就是cd之类的,go之类的

有关于性能调优

建议好好看这个链接blog.wolfogre.com/posts/go-pp…

在go文件的main函数中引入这个包就行

import "_ "net/http/pprof""

如何看可以查看哪些数据

进这里

http://localhost:6060/debug/pprof/

如何指定自己使用的工具

go tool pprof http://localhost:6060/debug/pprof/profile

如何使用web

web命令需要graphviz,附个链接自用graphviz.org/download/,记…

然后如果你在装之前就已经是在用goland的话,它的终端是识别不出来你的web命令的,所以,建议直接关掉goland再来一次

然后还有,我不用wsl的原因是我不知道这个文件存在wsl哪里,裂开

一些细碎的知识点

  • var (
    	x    int64
    	lock sync.Mutex
    )
    

    这种做法有什么作用,最大的最用就是帮你省了在每个变量前加var的操作,如果不用var,你就得这么声明变量

    var x int64
    var lock sync.Mutex