这是我参与「第三届青训营 -后端场」笔记创作活动的的第二篇笔记
并发执行的顺序本来就不能保证,不能强行为了保证并发执行的顺序而导致系统速度变慢,更直接来说,如果并发执行的顺序能够确定,那其以及不具备并发的意义,并发 的意义在于雨露均沾,相比于单一的顺序执行,并发执行更增加了灵活度,但与此同时,我们必须保证并发执行的过程中临界资源的安全性,甚至并发执行的有效性, 关于并发执行的优点:我个人认为最大的优点在于cpu的高效性比如因为IO操作遇到了阻塞,CPU可以转去执行其他线程,这时并发的优点就显示出来了:更高效的利用CPU, 提高程序的响应速度。如果是顺序执行,那么在程序的可靠性不高的情况下,死机是必然的情况,这凸显了并发的必要性。同时多核cpu的优势也只能由并发凸显出来。 关于并发的相关包
值得注意的是sync中的mutex以及sync中的WaitGroup、runtime里面的goexit以及gosched 个人认为sync.WaitGroup更多的使用情况在于主协程等待使用go创建出来的协程执行完毕后推出
sync.mutex是传统的锁机制,相当于java中的锁机制 sync.wrmutex为读写锁机制 Go语言的并发模型是CSP(Communicating Sequential Processes),提倡通过通信共享内存而不是通过共享内存而实现通信。 如果说goroutine是Go程序并发的执行体,channel就是它们之间的连接。channel是可以让一个goroutine发送特定值到另一个goroutine的通信机制。 sync.once用于并发情况下,也就是在并发的条件下保证函数只执行一次