GoMybatis icon indicating copy to clipboard operation
GoMybatis copied to clipboard

这个框架测试过高并发情况吗?

Open lmh88 opened this issue 6 years ago • 3 comments

拜读过框架源码,发现源码很少加锁和原子操作,问一下这个是怎么避免高并发下的资源竞争和出错的?感觉代码有一些写java的思维在里面

lmh88 avatar Dec 03 '18 07:12 lmh88

拜读过框架源码,发现源码很少加锁和原子操作,问一下这个是怎么避免高并发下的资源竞争和出错的?感觉代码有一些写java的思维在里面

有部分生成sql和解码的性能测试,详见SqlResultDecodeUtil_test.go 和 SqlBuilder_test.go

zhuxiujia avatar Dec 03 '18 07:12 zhuxiujia

拜读过框架源码,发现源码很少加锁和原子操作,问一下这个是怎么避免高并发下的资源竞争和出错的?感觉代码有一些写java的思维在里面

无需使用锁或者channel等原子操作,因为本身就是多个读(指运行期xml数据多协程读),单个写入的

在高并发中,读写锁是表示,读的过程中可以有多个读,一旦碰到写的过程只能有一个写,即写的时候只能有一个写并且其他的不能读。 GoMybatis 只做了2阶段的工作, 第一阶段: 在服务启动前根据xml中的逻辑生成一个[]MapperXml。因为第一阶段是程序启动的时候做的基本上一个mapper对应一个go文件,故不存在资源竞争要加锁的情况。 第二阶段: 在服务运行期使用SqlBuilder根据新参数构建一条sql的string(多读,无竞争写入),然后根据mysql查询结果写入到新提供的struct上(无竞争写入),这里也不存在并发资源竞争情况

zhuxiujia avatar Dec 03 '18 08:12 zhuxiujia

高并发测试情况现官网里现在写上了 https://zhuxiujia.github.io/gomybatis.io/info.html 并发测试的代码 也已经加入

zhuxiujia avatar Dec 05 '18 02:12 zhuxiujia