gorm 如果使用同一个sql.db 去开协程。为什么速度会比单线程跑快很多

WorkDog · 2021-05-22 17:12:45 · 1773 次点击 · 预计阅读时间 1 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2021-05-22 17:12:45 的文章,其中的信息可能已经有所发展或是发生改变。

我想问下,我使用同一个sql.db 去开启很多协程执行sql。和单线程跑 sql。为什么协程快那么多??

// 单线程。
now := time.Now() //6.1172755s
for i := 0; i <= 100; i++ {
    var temp tms.LogisticsOrder
    temp, err = lDao.FindOrderById(2964)
    if err != nil {
        break
    }
}
if err != nil {
    fmt.Println(err)
}



//开启协程。
now := time.Now()  //372.6668ms
list, err := pkg.StartRoutine(time.Second*100, lDao.FindOrderById, params, 100) // 里面开启100个携程
if err != nil {
    fmt.Println(err)
}
fmt.Println(time.Since(now))

一个花了6s多,一个只花了372ms。为什么呢? 我不是在协程里面开的db 也就是这100个协程公用同一个db 。按常理来说他们的速度不可能差这么多啊!

有没有吊大的,讲解一下,求求了!!!!


有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1773 次点击  
加入收藏 微博
1 回复  |  直到 2021-05-22 19:34:50
saberlong
saberlong · #1 · 4年之前

常见的DB库支持线程池或go程池。然后你多协程访问时与数据库建立了多个连接。然后数据库支持多线程并发访问的,消耗时间就少了

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传