问一下 gin 服务启动了一个端口,初始化时连了一个数据库。请问这个数据库连接是单线程是吧?

2022-09-29 12:10:51 +08:00
 longmeier90
// InitDbConn 数据库连接
func InitDbConn(){
	dbUrl := global.ServerConfig.HisInfo.DBUrl
	dbUrl = fmt.Sprintf("%s?%s", dbUrl,"charset=utf8&parseTime=true")
	MysqlDB, err := sql.Open("mysql", dbUrl)
    
	if err !=nil{
		panic(err)
	}
	err = MysqlDB.Ping()
	if err!=nil{
		panic(err)
	}

	global.MysqlDB = MysqlDB
}

// 服务启动方式
func main() {
	global.BasePath = utils.ProjectPath()
	defer initialize.InitClose()
	initialize.InitConfig() // 初始化配置
	initialize.InitLogger() // 初始化日志
	initialize.InitDbConn() // 数据库连接
	initialize.InitDb() // 数据库连接
	fmt.Println(" gorm 连接成功...")
	initialize.InitSrvConn() // grpc 连接
	fmt.Println(" grpc 连接成功...")
	global.Logger.Info("数据库连接成功...")
	fmt.Println(" 数据库连接成功...")
	global.Logger.Info(fmt.Sprintf("启动服务器,端口:%d", global.Port))

	// 注册 interceptor
	var opts []grpc.ServerOption
	opts = append(opts, grpc.UnaryInterceptor(middleware.Interceptor))
	g := grpc.NewServer(opts...)
	fee.RegisterGreeterServer(g, &Server{})
	grpcDns := fmt.Sprintf("0.0.0.0:%v", global.GrpcPort)
	lis, err := net.Listen("tcp", grpcDns)
	if err != nil {
		panic("failed to listen:" + err.Error())
	}
	err = g.Serve(lis)
	if err != nil {
		panic("failed to start grpc:" + err.Error())
	}
	// 接收终止信号
	quit := make(chan os.Signal)
	signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
	<-quit
}

之前 python 就是单线程 初始化了一个 mysql 连接,每个请求都会排队使用 mysql 连接。 问一下 go 是不是也这种情况?各位大佬有没有遇到这种情况,多核的情况下是怎么个使用的。

1717 次点击
所在节点    Go 编程语言
4 条回复
keepeye
2022-09-29 12:23:31 +08:00
多虑了,有连接池. 参见 *sql.DB.SetMaxOpenConns
kidtest
2022-09-29 12:24:39 +08:00
https://pkg.go.dev/database/sql#Open

看文档,应该是开了一个并发安全的连接池。理论上性能应该比 python 要高
someonedeng
2022-09-29 18:41:38 +08:00
其实是个连接池
securityCoding
2022-09-30 11:50:17 +08:00
底层帮你做好了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/883776

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX