账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    怎样理解golang的异步?
    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 语言中是一种重要的编程技术,它可以帮助开发者更好地管理程序的执行流程,提高程序的性能和响应速度。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部