登录
首页 >  Golang >  Go问答

Goroutines 和 C# async/await 都实现了并发编程

来源:stackoverflow

时间:2024-03-06 14:15:26 289浏览 收藏

IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《Goroutines 和 C# async/await 都实现了并发编程》,聊聊,我们一起来看看吧!

问题内容

如果进程在与我们的应用程序服务器不同的 cpu 上继续运行,则使用异步/等待方法可能非常有用。

例如,数据库查询在数据库服务器上运行,查询运行时无需阻塞应用程序线程。您可以从这里查看。

让我们看看那个 c# 代码块

public async task saveasync(user user)
    {
        using (datacontext ctx = new datacontext())
        {
            ctx.user.add(user);
            // database does its job while we are waiting
            await ctx.savechangesasync();
        }
    }

那么下面的 goroutine 代码有同样的效果吗?

func (u *User) Create(userModel *model.User) error {
var err error
var wg sync.WaitGroup
//or channel can be used for sync 
wg.Add(1)  //wg := make(chan int)


go func() {
    defer wg.Done(). //wg <- 1
    _, err = u.Transaction.User.
        Create().
        SetAge(userModel.Age).
        SetName(userModel.Name).
        SetIsDeleted(false).
        Save(u.Ctx)
   
}()

wg.Wait() //    <-wg
if err !=nil{
    return err
}
return nil}

解决方案


Goroutines 和 async/await 是异步编程的不同方法。在底层你有 P 个进程 M 个 CPU 核心和 G 个协程。您的语言运行时会操作它们 - 检查何时应停止一个进程(未从实际进程中调度,因此未调度到 CPU 内核),而其他进程应调度到内核。

什么方法更好?这取决于开发商。对我来说 async/await 有更多的语法糖,goroutines 在编程方面更明确。因此,首先可以更简洁,其次 - 在 select {..} 等复杂情况下更容易理解。

今天关于《Goroutines 和 C# async/await 都实现了并发编程》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>