goroutine
go中使用Goroutine来实现并发concurrently。
Goroutine是Go语言特有的名词。区别于进程Process,线程Thread,协程Coroutine,因为Go语言的创造者们觉得和他们是有所区别的,所以专门创造了Goroutine。
Goroutine是与其他函数或方法同时运行的函数或方法。Goroutines可以被认为是轻量级的线程。与线程相比,创建Goroutine的成本很小,它就是一段代码,一个函数入口。以及在堆上为其分配的一个堆栈(初始大小为4K,会随着程序的执行自动增长删除)。因此它非常廉价,Go应用程序可以并发运行数千个Goroutines。
临界资源安全问题:
首先看代码:
执行结果:
至于什么原因,做过java的就不解释了,那么go是如何解决这个问题呢
waitgruop
看代码实例:
wg.wait方法,表示程序进入阻塞,等待其他goroutine执行完,再去执行线程下的代码
wg.add方法 表示添加几个goroutine
wg.done表示goroutine的代码执行完成了
lock:
看代码实例:
执行结果:
还有读写锁,也是如此:
channel
结果:
Original: https://www.cnblogs.com/xiufengchen/p/12261670.html
Author: 菩提树下的丁春秋
Title: go语言四 channel和gorotime
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/535770/
转载文章受原作者版权保护。转载请注明原作者出处!