怎样理解golang的异步?

都说golang,可以用同步的思想写出异步的代码,不知道大家都是如何理解这句话的?下面这段代码算是这句话的一个例子吗?
funcsum(x,yint,cchanint){
time.sleep(5*time.Second)
c<-x+y
}
funcanother(cchanint){
fmt.Println(<-c)//管道有数据了直接继续执行,相当于异步通知
dosomethingelse...
}
funcmain(){
c:=make(chanint)
gosum(24,18,c)
goanother(c)
fmt.Println("继续执行")
dosomethingelse...
time.Sleep(60*time.Second)
}
此外,再说一下我对同步异步阻塞非阻塞的理解:
阻塞非阻塞:一般用于网络io中,阻塞即需要等待,不会立即返回。非阻塞则会立刻返回。
同步异步:当一个同步调用发出后,调用者要主动去获取调用结果。当一个异步过程调用发出后,实际处理这个调用的部件在完成后,通过消息回调来通知调用者调用的结果。
可以明确的是,阻塞与非阻塞与是否同步异步无关
附赠一个讲解阻塞非阻塞和同步异步挺清楚的一篇文章,传送门:https://www.cnblogs.com/wxl-d...
拉莫斯之舞
浏览 1387回答 2
2回答

小唯快跑啊

用同步的思想写出异步的代码这句话我在golang没有听过。如果非要说这个事的话,目前我只知道javascript的async/await是可以理解为用同步的思想写出异步的代码。好了,回到问题上来,你的问题这里用同步的思想写出异步的代码,golang有是有这个,那就是go关键字。不管什么操作,都可以加上go关键词来实现异步前提是go调度器会把执行权给到你这个协程,一般发生阻塞go调度器就会切换协程
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript