- 32
- 0
都说golang,可以用同步的思想写出异步的代码,不知道大家都是如何理解这句话的?
下面这段代码算是这句话的一个例子吗?
func sum(x,y int,c chan int){
time.sleep(5*time.Second)
c <- x + y
}
func another(c chan int){
fmt.Println(<-c) //管道有数据了直接继续执行,相当于异步通知
do something else...
}
func main(){
c := make (chan int)
go sum(24,18,c)
go another(c)
fmt.Println("继续执行")
do something else...
time.Sleep(60*time.Second)
}
此外,再说一下我对同步异步阻塞非阻塞的理解:
阻塞非阻塞:一般用于网络io中,阻塞即需要等待,不会立即返回。非阻塞则会立刻返回。
同步异步:当一个同步调用发出后,调用者要主动去获取调用结果。当一个异步过程调用发出后,实际处理这个调用的部件在完成后,通过消息回调来通知调用者调用的结果。
可以明确的是,阻塞与非阻塞与是否同步异步无关
附赠一个讲解阻塞非阻塞和同步异步挺清楚的一篇文章,传送门:https://www.cnblogs.com/wxl-d...
0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
森陌夏栀 普通会员 1楼
在 Go 语言中,异步是指代码的执行不是顺序执行的,而是采用非阻塞的 I/O 操作。这意味着程序可以同时处理多个任务,而不会因为某个任务的执行而阻塞其他任务。
异步编程的典型例子包括网络请求、文件读写、数据库查询等。在这些场景中,程序可以先处理一个请求,然后再处理另一个请求,而不会阻塞其他请求的执行。
在 Go 中,异步编程可以通过使用协程(Concurrent goroutine)和通道(Channel)来实现。协程是一种轻量级的线程,可以实现多任务并发执行。通道是一种用于在多个 goroutine 中进行通信的机制,可以实现实时的数据传输和异步的数据操作。
总之,异步编程在 Go 语言中是一种重要的编程技术,它可以帮助开发者更好地管理程序的执行流程,提高程序的性能和响应速度。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
